Swipe view by gesture
This is a sample of 2-view swipe.
Overview
Prepare 3 viewcontroller.
First is root(main) view controller.
This has 2 viewcontroller(left, center)
It manage 2 view action and view size.
You can set left and center viewcontroller you want to add.
You can swipe both viewcontroller.
Sample
Let’s go!
SeparatorViewController.h
@interface SeparatorViewController : UIViewController @property (nonatomic, strong)UIViewController *leftViewController; @property (nonatomic, strong)UIViewController *centerViewController; @property (nonatomic, assign) int width; @end
SeparatorViewController.m
#import "SeparatorViewController.h" @interface SeparatorViewController () @end @implementation SeparatorViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Erorr Handling if (self.leftViewController == nil) return; if (self.centerViewController == nil) return; if (self.width == 0 ) return; [self deafultPoistion]; // Arrange Left View Left UIPanGestureRecognizer *panLeftGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanLeft:)]; [self.leftViewController.view addGestureRecognizer:panLeftGesture]; // Arrange Center View Controller UIPanGestureRecognizer *panRightGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanCenter:)]; [self.centerViewController.view addGestureRecognizer:panRightGesture]; [self.view addSubview:self.leftViewController.view]; [self.view addSubview:self.centerViewController.view]; } #pragma mark - Default -(void)deafultPoistion { if (self.width == 0) return; float left_width = self.view.bounds.size.width * self.width / 100; float center_width = self.view.bounds.size.width * (100 - self.width) / 100; [self setViewPosition:left_width center_width:center_width]; } -(void)setViewPosition:(float)left_width center_width:(float)center_width { self.leftViewController.view.frame = CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y, left_width, self.view.bounds.size.height); self.centerViewController.view.frame = CGRectMake(self.view.bounds.origin.x + left_width, self.view.bounds.origin.y, center_width, self.view.bounds.size.height); } #pragma mark - Event -(void)handlePanLeft:(UIPanGestureRecognizer *)sender { UIPanGestureRecognizer* pan = (UIPanGestureRecognizer*) sender; CGPoint location = [pan translationInView:self.view]; //CGFloat velocityX = [pan velocityInView:self.view].x; // Calculte position float current_left = self.leftViewController.view.bounds.size.width; if ( current_left + location.x > 0 && current_left + location.x < self.view.bounds.size.width ) { current_left = current_left + location.x; } float current_center = self.view.bounds.size.width - current_left; // Set position [self setViewPosition:current_left center_width:current_center]; [sender setTranslation:CGPointZero inView:self.view]; } -(void)handlePanCenter:(UIPanGestureRecognizer *)sender { UIPanGestureRecognizer* pan = (UIPanGestureRecognizer*) sender; CGPoint location = [pan translationInView:self.view]; // Calculate position float current_center = self.centerViewController.view.bounds.size.width; if ( current_center - location.x > 0 && current_center - location.x < self.view.bounds.size.width ) { current_center = current_center - location.x; } float current_left = self.view.bounds.size.width - current_center; [self setViewPosition:current_left center_width:current_center]; [sender setTranslation:CGPointZero inView:self.view]; } @end [/cpp] <h4>Test Code</h4> [cpp] - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; SeparatorViewController *controller = [[SeparatorViewController alloc] init]; UIViewController *left = [[UIViewController alloc] init]; [left.view setBackgroundColor:[UIColor blueColor]]; UIViewController *center = [[UIViewController alloc] init]; [center.view setBackgroundColor:[UIColor redColor]]; controller.width = 30; // percentage controller.leftViewController = left; controller.centerViewController = center; self.window.rootViewController = controller; [self.window makeKeyAndVisible]; return YES; }