Контроллер просмотра жестов салфеткой Xcode 5.1.1

#ios #objective-c #xcode #uigesturerecognizer #viewcontroller

#iOS #objective-c #xcode #распознаватель пользовательских настроек #viewcontroller

Вопрос:

Я новичок в Objective-C и Xcode, и у меня возникают трудности с изменением представлений. Я понимаю, что вы можете использовать UIScrollView для переключения между видами изображений, но я хотел бы просто провести пальцем вправо, чтобы изменить виды, и проведите пальцем влево, чтобы вернуться. У меня есть AppDelegate.h и AppDelegate.m которые не были изменены. ViewController.h и ViewController.m приведены ниже:

ViewController.h:

 #import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
  

ViewController.m:

 #import "ViewController.h"
#import "ViewController2.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    //sets up gesture recognizer
    UISwipeGestureRecognizer *swipeRightGesture=[[UISwipeGestureRecognizer alloc]               initWithTarget:self action:@selector(handleSwipeGesture:)];
    [self.view addGestureRecognizer:swipeRightGesture];
    swipeRightGesture.direction=UISwipeGestureRecognizerDirectionRight;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)handleSwipeGesture:(UISwipeGestureRecognizer *)sender 
{
    NSUInteger touches = sender.numberOfTouches;
    if (touches == 2)
    {
        if (sender.state == UIGestureRecognizerStateEnded)
        {
            ViewController2 *vc2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];
            [self.navigationController pushViewController:vc2 animated:YES];
        }
    }
}

@end
  

У меня также есть ViewController2.h и ViewController2.m , которые я связал со вторым представлением в раскадровке вместе с жестом, который я связал с handleSwipeGesture методом выше.

Комментарии:

1. вы хотите провести двумя пальцами? или просто одним пальцем?

Ответ №1:

 - (void)viewDidLoad
{
    [super viewDidLoad];

    UISwipeGestureRecognizer *oneFingerSwipeLeft = [[UISwipeGestureRecognizer alloc]
                                                    initWithTarget:self
                                                    action:@selector(oneFingerSwipeLeft:)] ;
    [oneFingerSwipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
    [[self view] addGestureRecognizer:oneFingerSwipeLeft];
}

- (void)oneFingerSwipeLeft:(UITapGestureRecognizer *)recognizer
{
    NSLog(@"Swiped left");
  // Add your navigation Code Here
}
  

Вы можете использовать это, если хотите провести одним пальцем. Если вы хотите добавить два пальца, добавьте свой

 NSUInteger touches = sender.numberOfTouches;
    if (touches == 2)
    {
        if (sender.state == UIGestureRecognizerStateEnded)
        {
        }
    }
  

приведенный выше код в (void)onefingerSwipeLeft методе

Ответ №2:

- (IBAction)handleSwipeGesture:(UISwipeGestureRecognizer *)sender не обязательно быть IBAction, поскольку он не подключен к IBOutlet. Вместо этого он должен вернуться void .

Кроме того, вместо проверки количества касаний после того, как жест уже был распознан, вы можете сделать два касания обязательным условием для его распознавания вообще, используя строку:

 swipeRightGesture.numberOfTouchesRequired = 2;
  

Следовательно, методу -(void)handleSwipeGesture больше не нужно принимать аргумент, поэтому вы можете удалить двоеточие из строки, где вы объявляете распознаватель жестов.

Окончательный код может выглядеть примерно так:

 UISwipeGestureRecognizer *swipeRightGesture=[[UISwipeGestureRecognizer alloc]               initWithTarget:self action:@selector(handleSwipeGesture)];
swipeRightGesture.direction=UISwipeGestureRecognizerDirectionRight;
swipeRightGesture.numberOfTouchesRequired = 2;
[self.view addGestureRecognizer:swipeRightGesture];

...
...

- (void)handleSwipeGesture {
    ViewController2 *vc2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];
    [self.navigationController pushViewController:vc2 animated:YES];
}