diff --git a/Classes/FlipBoardNavigationController.h b/Classes/FlipBoardNavigationController.h index 173931a..d6f2722 100644 --- a/Classes/FlipBoardNavigationController.h +++ b/Classes/FlipBoardNavigationController.h @@ -31,18 +31,28 @@ typedef void (^FlipBoardNavigationControllerCompletionBlock)(void); @interface FlipBoardNavigationController : UIViewController -@property(nonatomic, retain) NSMutableArray *viewControllers; +@property (nonatomic, copy) float(^alphaCalculationBlock)(CGFloat transition); +@property (nonatomic, copy) float(^transformCalculationBlock)(CGFloat percentage); +@property (nonatomic, assign) NSTimeInterval transitionsAnimationDuration; +@property (nonatomic, retain) NSMutableArray *viewControllers; - (id) initWithRootViewController:(UIViewController*)rootViewController; - (void) pushViewController:(UIViewController *)viewController; +- (void) pushViewControllerWithoutAnimation:(UIViewController *)viewController andCompletionHandler:(FlipBoardNavigationControllerCompletionBlock)handler; - (void) pushViewController:(UIViewController *)viewController completion:(FlipBoardNavigationControllerCompletionBlock)handler; - (void) popViewController; - (void) popViewControllerWithCompletion:(FlipBoardNavigationControllerCompletionBlock)handler; +- (void) popToRootViewController; +- (void) popToRootViewControllerWithCompletion:(FlipBoardNavigationControllerCompletionBlock)handler; +- (void) popToRootViewControllerWithoutAnimation; +- (void) popToRootViewControllerWithoutAnimationWithCompletion:(FlipBoardNavigationControllerCompletionBlock)handler; + @end @interface UIViewController (FlipBoardNavigationController) @property (nonatomic, retain) FlipBoardNavigationController *flipboardNavigationController; +@property (nonatomic, readonly) UIPanGestureRecognizer *flipboardNavigationControllerPanGesture; @end diff --git a/Classes/FlipBoardNavigationController.m b/Classes/FlipBoardNavigationController.m index 7084e16..059bdae 100644 --- a/Classes/FlipBoardNavigationController.m +++ b/Classes/FlipBoardNavigationController.m @@ -4,7 +4,7 @@ // // Created by Michael henry Pantaleon on 4/30/13. // Copyright (c) 2013 Michael Henry Pantaleon. All rights reserved. -// +// // Version 1.0 // // Permission is hereby granted, free of charge, to any person obtaining a copy @@ -27,6 +27,7 @@ #import "FlipBoardNavigationController.h" #import +#import static const CGFloat kAnimationDuration = 0.5f; static const CGFloat kAnimationDelay = 0.0f; @@ -38,6 +39,101 @@ PanDirectionRight = 2 } PanDirection; +#pragma mark - UIViewController Category + +NSString* const FlipboardNavigationControllerPanGesture = @"FlipboardNavigationControllerPanGesture"; +NSString* const FlipboardNavigationControllerViewsWithEnabledScrollToTopProperty = @"FlipboardNavigationControllerViewsWithEnabledScrollToTopProperty"; + +@interface UIViewController(FlipBoardNavigationControllerPrivate) + +@property (nonatomic, strong) NSMutableArray *viewsWithEnabledScrollToTopProperty; + +@end + +//For Global Access of flipViewController +@implementation UIViewController (FlipBoardNavigationController) + +@dynamic flipboardNavigationController; + +#pragma mark - Helpers + +- (void)disableScrollsToTopInScrollingViews{ + + self.viewsWithEnabledScrollToTopProperty = [self scrollToTopsViewsInHierarchy]; + [self.viewsWithEnabledScrollToTopProperty enumerateObjectsUsingBlock:^(UIScrollView *view, NSUInteger idx, BOOL *stop) { + view.scrollsToTop = NO; + }]; +} + +- (void)enableScrollsToTopInScrollingViews{ + + [self.viewsWithEnabledScrollToTopProperty enumerateObjectsUsingBlock:^(UIScrollView *view, NSUInteger idx, BOOL *stop) { + view.scrollsToTop = YES; + }]; +} + +- (NSMutableArray *)scrollToTopsViewsInHierarchy{ + + NSMutableArray *scrollingViews = [NSMutableArray new]; + [self putScrollToTopsViewsInViewsHierarchy:self.view intoArray:scrollingViews]; + + return scrollingViews; +} + +- (void)putScrollToTopsViewsInViewsHierarchy:(UIView *)view intoArray:(NSMutableArray *)array{ + + for(UIView *subview in view.subviews){ + + [self putScrollToTopsViewsInViewsHierarchy: subview intoArray: array]; + + if([subview respondsToSelector:@selector(setScrollsToTop:)] && + ((UIScrollView *)subview).scrollsToTop){ + [array addObject: subview]; + } + } +} + +#pragma mark - Properties + +- (void)setViewsWithEnabledScrollToTopProperty:(NSMutableArray *)viewsWithEnabledScrollToTopProperty{ + objc_setAssociatedObject(self, (__bridge const void *)(FlipboardNavigationControllerViewsWithEnabledScrollToTopProperty), viewsWithEnabledScrollToTopProperty, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (NSMutableArray *)viewsWithEnabledScrollToTopProperty{ + return objc_getAssociatedObject(self, (__bridge const void *)(FlipboardNavigationControllerViewsWithEnabledScrollToTopProperty)); +} + +- (void)setFlipboardNavigationControllerPanGesture:(UIPanGestureRecognizer *)flipboardNavigationControllerPanGesture{ + objc_setAssociatedObject(self, (__bridge const void *)(FlipboardNavigationControllerPanGesture), flipboardNavigationControllerPanGesture, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (UIPanGestureRecognizer *)flipboardNavigationControllerPanGesture{ + return objc_getAssociatedObject(self, (__bridge const void *)(FlipboardNavigationControllerPanGesture)); +} + +- (FlipBoardNavigationController *)flipboardNavigationController +{ + + if([self.parentViewController isKindOfClass:[FlipBoardNavigationController class]]){ + return (FlipBoardNavigationController*)self.parentViewController; + } + else if([self.parentViewController isKindOfClass:[UINavigationController class]] && + [self.parentViewController.parentViewController isKindOfClass:[FlipBoardNavigationController class]]){ + return (FlipBoardNavigationController*)[self.parentViewController parentViewController]; + } + else{ + return nil; + } + +} + +@end + +@interface UIViewController() + +@property (nonatomic, retain, readwrite) UIPanGestureRecognizer *flipboardNavigationControllerPanGesture; + +@end @interface FlipBoardNavigationController (){ NSMutableArray *_gestures; @@ -47,7 +143,7 @@ @interface FlipBoardNavigationController (){ CGFloat _percentageOffsetFromLeft; } -- (void) addPanGestureToView:(UIView*)view; +- (void) addPanGestureToViewController:(UIViewController*)viewController; - (void) rollBackViewController; - (UIViewController *)currentViewController; @@ -80,11 +176,11 @@ - (void) dealloc { - (void) loadView { [super loadView]; CGRect viewRect = [self viewBoundsWithOrientation:self.interfaceOrientation]; - + UIViewController *rootViewController = [self.viewControllers objectAtIndex:0]; [rootViewController willMoveToParentViewController:self]; [self addChildViewController:rootViewController]; - + UIView * rootView = rootViewController.view; rootView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; rootView.frame = viewRect; @@ -102,36 +198,74 @@ - (void) loadView { #pragma mark - PushViewController With Completion Block - (void) pushViewController:(UIViewController *)viewController completion:(FlipBoardNavigationControllerCompletionBlock)handler { + + UIViewController *currentViewController = [self currentViewController]; + + [viewController willMoveToParentViewController:self]; + [self addChildViewController:viewController]; _animationInProgress = YES; viewController.view.frame = CGRectOffset(self.view.bounds, self.view.bounds.size.width, 0); viewController.view.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; _blackMask.alpha = 0.0; - [viewController willMoveToParentViewController:self]; - [self addChildViewController:viewController]; + [currentViewController viewWillDisappear: YES]; [self.view bringSubviewToFront:_blackMask]; [self.view addSubview:viewController.view]; - [UIView animateWithDuration:kAnimationDuration delay:kAnimationDelay options:0 animations:^{ + [UIView animateWithDuration:self.transitionsAnimationDuration delay:kAnimationDelay options:0 animations:^{ CGAffineTransform transf = CGAffineTransformIdentity; - [self currentViewController].view.transform = CGAffineTransformScale(transf, 0.9f, 0.9f); + CGFloat scale = (self.transformCalculationBlock != nil) ? self.transformCalculationBlock(1) : 0.9f; + [self currentViewController].view.transform = CGAffineTransformScale(transf, scale, scale); viewController.view.frame = self.view.bounds; _blackMask.alpha = kMaxBlackMaskAlpha; } completion:^(BOOL finished) { if (finished) { [self.viewControllers addObject:viewController]; [viewController didMoveToParentViewController:self]; + [currentViewController viewDidDisappear: YES]; + [currentViewController disableScrollsToTopInScrollingViews]; _animationInProgress = NO; _gestures = [[NSMutableArray alloc] init]; - [self addPanGestureToView:[self currentViewController].view]; - handler(); + [self addPanGestureToViewController:[self currentViewController]]; + if(handler != nil){ + handler(); + } } }]; } +- (void) pushViewControllerWithoutAnimation:(UIViewController *)viewController andCompletionHandler:(FlipBoardNavigationControllerCompletionBlock)handler{ + + UIViewController *currentViewController = [self currentViewController]; + + [currentViewController viewWillDisappear: NO]; + [viewController willMoveToParentViewController:self]; + [self addChildViewController:viewController]; + [self.view bringSubviewToFront:_blackMask]; + [self.view addSubview:viewController.view]; + + CGAffineTransform transf = CGAffineTransformIdentity; + CGFloat scale = (self.transformCalculationBlock != nil) ? self.transformCalculationBlock(1) : 0.9f; + [self currentViewController].view.transform = CGAffineTransformScale(transf, scale, scale); + _blackMask.alpha = kMaxBlackMaskAlpha; + + [self.viewControllers addObject:viewController]; + [viewController didMoveToParentViewController:self]; + [currentViewController viewDidDisappear: NO]; + [currentViewController disableScrollsToTopInScrollingViews]; + _gestures = [[NSMutableArray alloc] init]; + [self addPanGestureToViewController:[self currentViewController]]; + + + if(handler != nil){ + handler(); + } +} + - (void) pushViewController:(UIViewController *)viewController { [self pushViewController:viewController completion:^{}]; } #pragma mark - PopViewController With Completion Block + - (void) popViewControllerWithCompletion:(FlipBoardNavigationControllerCompletionBlock)handler { _animationInProgress = YES; if (self.viewControllers.count < 2) { @@ -141,10 +275,11 @@ - (void) popViewControllerWithCompletion:(FlipBoardNavigationControllerCompletio UIViewController *currentVC = [self currentViewController]; UIViewController *previousVC = [self previousViewController]; [previousVC viewWillAppear:NO]; - [UIView animateWithDuration:kAnimationDuration delay:kAnimationDelay options:0 animations:^{ + [UIView animateWithDuration:self.transitionsAnimationDuration delay:kAnimationDelay options:0 animations:^{ currentVC.view.frame = CGRectOffset(self.view.bounds, self.view.bounds.size.width, 0); CGAffineTransform transf = CGAffineTransformIdentity; - previousVC.view.transform = CGAffineTransformScale(transf, 1.0, 1.0); + CGFloat scale = (self.transformCalculationBlock != nil) ? self.transformCalculationBlock(0) : 1.0f; + previousVC.view.transform = CGAffineTransformScale(transf, scale, scale); previousVC.view.frame = self.view.bounds; _blackMask.alpha = 0.0; } completion:^(BOOL finished) { @@ -157,12 +292,103 @@ - (void) popViewControllerWithCompletion:(FlipBoardNavigationControllerCompletio [self.viewControllers removeObject:currentVC]; _animationInProgress = NO; [previousVC viewDidAppear:NO]; - handler(); + [previousVC enableScrollsToTopInScrollingViews]; + if(handler != nil){ + handler(); + } } }]; } +- (void) popToRootViewController{ + [self popToRootViewControllerWithCompletion:nil]; +} + +- (void) popToRootViewControllerWithoutAnimation{ + [self popToRootViewControllerWithoutAnimationWithCompletion: nil]; +} + +- (void) popToRootViewControllerWithoutAnimationWithCompletion:(FlipBoardNavigationControllerCompletionBlock)handler{ + + _animationInProgress = YES; + if (self.viewControllers.count < 2) { + return; + } + + UIViewController *currentVC = [self currentViewController]; + UIViewController *rootVC = [self rootViewController]; + if(![currentVC isEqual: rootVC]){ + [rootVC viewWillAppear:NO]; + for(int index = [self.viewControllers count] - 2; index > 0; index--){ + UIViewController *vc = self.viewControllers[index]; + [vc.view removeFromSuperview]; + [vc removeFromParentViewController]; + } + + currentVC.view.frame = CGRectOffset(self.view.bounds, self.view.bounds.size.width, 0); + CGFloat scale = (self.transformCalculationBlock != nil) ? self.transformCalculationBlock(0) : 1.0f; + rootVC.view.transform = CGAffineTransformScale(CGAffineTransformIdentity, scale, scale); + rootVC.view.frame = self.view.bounds; + _blackMask.alpha = 0.0; + + [currentVC.view removeFromSuperview]; + [currentVC willMoveToParentViewController:nil]; + [self.view bringSubviewToFront:[self rootViewController].view]; + [currentVC removeFromParentViewController]; + [currentVC didMoveToParentViewController:nil]; + [_viewControllers removeObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [_viewControllers count] - 1)]]; + _animationInProgress = NO; + [rootVC viewDidAppear:NO]; + [rootVC enableScrollsToTopInScrollingViews]; + if(handler != nil){ + handler(); + } + } + +} + +- (void) popToRootViewControllerWithCompletion:(FlipBoardNavigationControllerCompletionBlock)handler{ + + _animationInProgress = YES; + if (self.viewControllers.count < 2) { + return; + } + + UIViewController *currentVC = [self currentViewController]; + UIViewController *rootVC = [self rootViewController]; + if(![currentVC isEqual: rootVC]){ + [rootVC viewWillAppear:NO]; + for(int index = [self.viewControllers count] - 2; index > 0; index--){ + UIViewController *vc = self.viewControllers[index]; + [vc.view removeFromSuperview]; + [vc removeFromParentViewController]; + } + [UIView animateWithDuration:self.transitionsAnimationDuration delay:kAnimationDelay options:0 animations:^{ + currentVC.view.frame = CGRectOffset(self.view.bounds, self.view.bounds.size.width, 0); + CGFloat scale = (self.transformCalculationBlock != nil) ? self.transformCalculationBlock(0) : 1.0f; + rootVC.view.transform = CGAffineTransformScale(CGAffineTransformIdentity, scale, scale); + rootVC.view.frame = self.view.bounds; + _blackMask.alpha = 0.0; + } completion:^(BOOL finished) { + if (finished) { + [currentVC.view removeFromSuperview]; + [currentVC willMoveToParentViewController:nil]; + [self.view bringSubviewToFront:[self rootViewController].view]; + [currentVC removeFromParentViewController]; + [currentVC didMoveToParentViewController:nil]; + [_viewControllers removeObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, [_viewControllers count] - 1)]]; + _animationInProgress = NO; + [rootVC viewDidAppear:NO]; + [rootVC enableScrollsToTopInScrollingViews]; + if(handler != nil){ + handler(); + } + } + }]; + } +} + - (void) popViewController { [self popViewControllerWithCompletion:^{}]; } @@ -173,10 +399,12 @@ - (void) rollBackViewController { UIViewController * vc = [self currentViewController]; UIViewController * nvc = [self previousViewController]; CGRect rect = CGRectMake(0, 0, vc.view.frame.size.width, vc.view.frame.size.height); - - [UIView animateWithDuration:0.3f delay:kAnimationDelay options:0 animations:^{ + + [UIView animateWithDuration:self.transitionsAnimationDuration delay:kAnimationDelay options:0 animations:^{ + CGAffineTransform transf = CGAffineTransformIdentity; - nvc.view.transform = CGAffineTransformScale(transf, 0.9f, 0.9f); + CGFloat scale = (self.transformCalculationBlock != nil) ? self.transformCalculationBlock(1) : 0.9f; + nvc.view.transform = CGAffineTransformScale(transf, scale, scale); vc.view.frame = rect; _blackMask.alpha = kMaxBlackMaskAlpha; } completion:^(BOOL finished) { @@ -188,12 +416,12 @@ - (void) rollBackViewController { - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { - + return (interfaceOrientation == UIInterfaceOrientationPortrait); } - (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { - + } #pragma mark - ChildViewController @@ -214,15 +442,24 @@ - (UIViewController *)previousViewController { return result; } +- (UIViewController *)rootViewController { + UIViewController *result = nil; + if ([self.viewControllers count]>0) { + result = [self.viewControllers objectAtIndex:0]; + } + return result; +} + #pragma mark - Add Pan Gesture -- (void) addPanGestureToView:(UIView*)view +- (void) addPanGestureToViewController:(UIViewController*)viewController { NSLog(@"ADD PAN GESTURE $$### %i",[_gestures count]); UIPanGestureRecognizer* panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(gestureRecognizerDidPan:)]; panGesture.cancelsTouchesInView = YES; panGesture.delegate = self; - [view addGestureRecognizer:panGesture]; + viewController.flipboardNavigationControllerPanGesture = panGesture; + [viewController.view addGestureRecognizer:panGesture]; [_gestures addObject:panGesture]; panGesture = nil; } @@ -230,31 +467,59 @@ - (void) addPanGestureToView:(UIView*)view # pragma mark - Avoid Unwanted Vertical Gesture - (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)panGestureRecognizer { CGPoint translation = [panGestureRecognizer translationInView:self.view]; - return fabs(translation.x) > fabs(translation.y) ; + if(fabs(translation.x) > fabs(translation.y)){ + UIViewController *currentViewController = [self currentViewController]; + if([currentViewController respondsToSelector:@selector(gestureRecognizerShouldBegin:)]){ + return [(UIViewController *)currentViewController gestureRecognizerShouldBegin:panGestureRecognizer]; + } + else{ + return YES; + } + } + else{ + return NO; + } } #pragma mark - Gesture recognizer - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { - UIViewController * vc = [self.viewControllers lastObject]; - _panOrigin = vc.view.frame.origin; - gestureRecognizer.enabled = YES; - return !_animationInProgress; + + if((!_animationInProgress && + ![gestureRecognizer isEqual: [self currentViewController].flipboardNavigationControllerPanGesture]) || + ([gestureRecognizer isEqual: [self currentViewController].flipboardNavigationControllerPanGesture] && gestureRecognizer.numberOfTouches == 0)){ + + UIViewController * vc = [self.viewControllers lastObject]; + _panOrigin = vc.view.frame.origin; + gestureRecognizer.enabled = YES; + return YES; + } + else{ + return NO; + } } - (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { + UIViewController *currentViewController = [self currentViewController]; + if([currentViewController respondsToSelector:@selector(gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:)]){ + return [(UIViewController *)currentViewController gestureRecognizer:gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:otherGestureRecognizer]; + } return YES; } #pragma mark - Handle Panning Activity - (void) gestureRecognizerDidPan:(UIPanGestureRecognizer*)panGesture { if(_animationInProgress) return; - + + if(panGesture.state == UIGestureRecognizerStateBegan){ + panGesture.maximumNumberOfTouches = panGesture.numberOfTouches; + } + CGPoint currentPoint = [panGesture translationInView:self.view]; CGFloat x = currentPoint.x + _panOrigin.x; PanDirection panDirection = PanDirectionNone; CGPoint vel = [panGesture velocityInView:self.view]; - + if (vel.x > 0) { panDirection = PanDirectionRight; } else { @@ -272,10 +537,11 @@ - (void) gestureRecognizerDidPan:(UIPanGestureRecognizer*)panGesture { [self transformAtPercentage:_percentageOffsetFromLeft]; if (panGesture.state == UIGestureRecognizerStateEnded || panGesture.state == UIGestureRecognizerStateCancelled) { + panGesture.maximumNumberOfTouches = NSUIntegerMax; // If velocity is greater than 100 the Execute the Completion base on pan direction if(abs(vel.x) > 100) { [self completeSlidingAnimationWithDirection:panDirection]; - }else { + }else { [self completeSlidingAnimationWithOffset:offset]; } } @@ -284,8 +550,8 @@ - (void) gestureRecognizerDidPan:(UIPanGestureRecognizer*)panGesture { #pragma mark - Set the required transformation based on percentage - (void) transformAtPercentage:(CGFloat)percentage { CGAffineTransform transf = CGAffineTransformIdentity; - CGFloat newTransformValue = 1 - (percentage*10)/100; - CGFloat newAlphaValue = percentage* kMaxBlackMaskAlpha; + CGFloat newTransformValue = (self.transformCalculationBlock != nil) ? self.transformCalculationBlock(percentage) : 1 - (percentage*10)/100; + CGFloat newAlphaValue = (self.alphaCalculationBlock != nil) ? self.alphaCalculationBlock(percentage) : percentage* kMaxBlackMaskAlpha; [self previousViewController].view.transform = CGAffineTransformScale(transf,newTransformValue,newTransformValue); _blackMask.alpha = newAlphaValue; } @@ -301,9 +567,9 @@ - (void) completeSlidingAnimationWithDirection:(PanDirection)direction { #pragma mark - This will complete the animation base on offset - (void) completeSlidingAnimationWithOffset:(CGFloat)offset{ - + if(offset<[self viewBoundsWithOrientation:self.interfaceOrientation].size.width/2) { - [self popViewController]; + [self popViewController]; }else { [self rollBackViewController]; } @@ -336,30 +602,4 @@ - (CGRect) viewBoundsWithOrientation:(UIInterfaceOrientation)orientation{ } } -@end - - - -#pragma mark - UIViewController Category -//For Global Access of flipViewController -@implementation UIViewController (FlipBoardNavigationController) -@dynamic flipboardNavigationController; - -- (FlipBoardNavigationController *)flipboardNavigationController -{ - - if([self.parentViewController isKindOfClass:[FlipBoardNavigationController class]]){ - return (FlipBoardNavigationController*)self.parentViewController; - } - else if([self.parentViewController isKindOfClass:[UINavigationController class]] && - [self.parentViewController.parentViewController isKindOfClass:[FlipBoardNavigationController class]]){ - return (FlipBoardNavigationController*)[self.parentViewController parentViewController]; - } - else{ - return nil; - } - -} - - @end \ No newline at end of file diff --git a/Sample/FlipViewControllerDemo/FlipViewControllerDemo/AnotherViewController.m b/Sample/FlipViewControllerDemo/FlipViewControllerDemo/AnotherViewController.m index 4c700ba..c8d49fe 100644 --- a/Sample/FlipViewControllerDemo/FlipViewControllerDemo/AnotherViewController.m +++ b/Sample/FlipViewControllerDemo/FlipViewControllerDemo/AnotherViewController.m @@ -7,6 +7,7 @@ // #import "AnotherViewController.h" +#import "FlipBoardNavigationController.h" @interface AnotherViewController () @@ -35,4 +36,8 @@ - (void)didReceiveMemoryWarning // Dispose of any resources that can be recreated. } +- (void)popToRootClicked:(id)sender{ + [self.flipboardNavigationController popToRootViewController]; +} + @end diff --git a/Sample/FlipViewControllerDemo/FlipViewControllerDemo/en.lproj/MainStoryboard_iPad.storyboard b/Sample/FlipViewControllerDemo/FlipViewControllerDemo/en.lproj/MainStoryboard_iPad.storyboard index f26e873..94bdcf2 100644 --- a/Sample/FlipViewControllerDemo/FlipViewControllerDemo/en.lproj/MainStoryboard_iPad.storyboard +++ b/Sample/FlipViewControllerDemo/FlipViewControllerDemo/en.lproj/MainStoryboard_iPad.storyboard @@ -1,7 +1,8 @@ - + - + + @@ -9,20 +10,15 @@ - +