Как поменять местами вид с помощью жеста смахивания XCode - PullRequest
4 голосов
/ 16 апреля 2011

Я использую XCode для разработки сенсорного приложения Cocoa для платформы iOS, но мне было трудно выяснить, как реализовать жест смахивания, который позволил бы пользователю проводить пальцем влево или вправо, чтобы перейти на новый ViewController(файл nib / xib).Я сделал swapView IBAction, используя кнопку и модальный переход, и я прочитал о TouchGestureRecognizer от Apple, но я не знаю, как реализовать действие смахивания, которое позволило бы изменить представление.

Я НЕЯ хочу использовать представление прокрутки, поскольку у меня есть несколько десятков контроллеров представления, которые я хочу, чтобы пользователь мог пролистывать.

Вот пример:

Первый просмотр Controller.xib:SwipeRight - перейти ко второму View Controller.xib

Второй просмотр Controller.xib:
SwipeLeft - перейти к первому View Controller.xib
SwipeRight - перейти к третьему представлению Controller.xib

etc, etc

Раньше я не использовал жесты UISwipe / Touch, но я использовал метод IBAction для переключения видов с помощью кнопки с модальным переходом (см. ниже):

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

Используете ли вы пролистывание, чтобы сделать подобный метод отформатированным по-другому?Если так, как мне разобраться в этом и отформатировать.

Спасибо

Редактировать - ответить в соответствии с комментарием к вопросу

Поместите это в свой viewDidLoad

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

Затем добавьтеселектор, например, вставив следующий код в ваш основной ...

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

Затем просто убедитесь, что вы импортируете другойViewViewController, на который вы переключаетесь, используя

#import "SecondViewController"

в верхней части вашегоосновной файл.Надеюсь, это поможет.

Конец редактирования

Ответы [ 2 ]

4 голосов
/ 16 апреля 2011

Звучит как идеальное время для использования UIGestureRecognizer или, точнее, UISwipeGestureRecognizer .

Подробнее о том, как их использовать, читайте в разделе Распознаватели жестов Руководства по обработке событий.

0 голосов
/ 01 декабря 2013

Предположим, вы хотите провести пальцем влево, чтобы вызвать другой вид справа.

В раскадровке перетащите распознаватель жестов смахиванием. Это сделает иконку под контроллером представления; перетащите этот значок и поместите его на ViewController, к которому вы хотите перейти. Это добавит переход, выберите пользовательский переход. Затем создайте класс UIStoryboardSegue. Добавьте следующий код:

- (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];
                     }];
}
...