AppleFanBoy
AppleFanBoy

Reputation: 101

How to swap views using a swipe gesture XCode

I am using XCode to develop a Cocoa touch application for the iOS platform but have had trouble finding out how to get a swipe gesture implemented that would allow the user to swipe their finger left or right to change to a new ViewController (nib/xib file). I have done a swapView IBAction using a button and modal transitioning and I have read about Apple's TouchGestureRecognizer but I don't know how to implement a swipe action that would allow a view change.

I do NOT want to use a scroll view, as I have several dozen view controllers, that I want the user to be able to swipe through.

Here is an example:

First View Controller.xib: SwipeRight- Go to second View Controller.xib

Second View Controller.xib:
SwipeLeft- Go to first View Controller.xib
SwipeRight- Go to third View Controller.xib

etc, etc

I have not used UISwipe/Touch Gestures before but I have used an IBAction method to switch views using a button with Modal Transitioning (see below):

-(IBAction)swapViews; { 
    SecondViewController *second2 =[[SecondViewController alloc initWithNibName:@"SecondViewController" bundle:nil];
    second2.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentModalViewController:second2 animated:YES];
    [second2 release];
}

Is using a swipe to do a similar method formatted differently? If so, how do I sort this out and format it.

Thank You

Edit - Answer as Per Comment on Question

Place this in your viewDidLoad

UISwipeGestureRecognizer *swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeLeftDetected:)];
swipeRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
[self.view addGestureRecognizer:swipeRecognizer];
[swipeRecognizer release];

Then add a selector as by pasting the following code into your main...

- (IBAction)swipeLeftDetected:(UIGestureRecognizer *)sender {
    NC2ViewController *second2 =[[NC2ViewController alloc] initWithNibName:@"NC2ViewController" bundle:nil];
    second2.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:second2 animated:YES];
    [second2 release];
}

Then just make sure you import the otherViewController you are swapping to using

#import "SecondViewController"

at the top of your main file. Hope this helps.

End Edit

Upvotes: 4

Views: 27282

Answers (2)

anivader
anivader

Reputation: 1

Lets assume you want to swipe left to bring up another view from the right.

In the storyboard, drag and drop a swipe gesture recognizer. It will make an icon below the view controller; drag this icon and drop onto the ViewController you want to navigate to. This will add a segue, select custom segue. Then create a UIStoryboardSegue class. Add the following code:

- (void)perform {
    UIViewController* source = (UIViewController *)self.sourceViewController;
    UIViewController* destination = (UIViewController *)self.destinationViewController;

    CGRect sourceFrame = source.view.frame;
    sourceFrame.origin.x = -sourceFrame.size.width;

    CGRect destFrame = destination.view.frame;
    destFrame.origin.x = destination.view.frame.size.width;
    destination.view.frame = destFrame;

    destFrame.origin.x = 0;

    [source.view.superview addSubview:destination.view];

    [UIView animateWithDuration:0.5
                     animations:^{
                         source.view.frame = sourceFrame;
                         destination.view.frame = destFrame;
                     }
                     completion:^(BOOL finished) {
                         UIWindow *window = source.view.window;
                         [window setRootViewController:destination];
                     }];
}

Upvotes: 0

Simon Goldeen
Simon Goldeen

Reputation: 9080

This sounds like a perfect time to use UIGestureRecognizer or, more specifically, UISwipeGestureRecognizer.

For more info on how to use them, read up in the Gesture Recognizers section of the Event Handling Guide.

Upvotes: 4

Related Questions