Как поменять местами виды с помощью swipe gesture XCode

#iphone #cocoa-touch #xcode #view #swipe

#iPhone #cocoa-touch #xcode #Вид #проведите

Вопрос:

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

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

Вот пример:

Первый контроллер просмотра.xib: SwipeRight- Перейдите ко второму контроллеру просмотра.xib

Второй контроллер просмотра.xib:
проведите левой кнопкой мыши — перейдите к первому контроллеру просмотра.xib
Проведите правой кнопкой мыши — перейдите к третьему контроллеру просмотра.xib

и т.д. и т.п.

Я раньше не использовал UISwipe / сенсорные жесты, но я использовал 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];
  

Затем добавьте селектор as, вставив следующий код в ваш main…

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

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

 #import "SecondViewController"
  

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

Завершить редактирование

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

1. Привет, AppleFanBoy, Ты смог реализовать пользовательский интерфейс для обмена представлениями? Я пробовал тот же подход, но безуспешно. Предыдущий наконечник не освобождается. Не могли бы вы, пожалуйста, опубликовать код, если он работает. Спасибо.

2. Я добился успеха и смог заставить его работать

3. Поместите это в свой viewDidLoad; {UISwipeGestureRecognizer *swipeRecognizer = [[Выделение UISwipeGestureRecognizer] initWithTarget:self action:@selector (swipeLeftDetected:)]; swipeRecognizer.direction = UISwipeGestureRecognizerDirectionLeft; [self.view addGestureRecognizer:swipeRecognizer]; [выпуск swipeRecognizer]; }

4. Затем добавьте селектор, вставив следующий код в ваш основной … — (IBAction)swipeLeftDetected:(UIGestureRecognizer *)отправитель { NC2ViewController *second2 =[[NC2ViewController alloc] initWithNibName:@пакет «NC2ViewController»: nil]; second2.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; [self presentModalViewController:second2 анимированный: ДА]; [выпуск second2]; }

5. Затем просто убедитесь, что вы импортируете otherViewController, на который вы меняете местами, используя #import «SecondViewController» в верхней части вашего основного файла. Надеюсь, это поможет.

Ответ №1:

Похоже, сейчас самое подходящее время для использования UIGestureRecognizer или, более конкретно, UISwipeGestureRecognizer.

Дополнительную информацию о том, как их использовать, читайте в разделе «Распознаватели жестов» Руководства по обработке событий.

Ответ №2:

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

В раскадровке перетащите распознаватель жестов салфетки. Под контроллером просмотра появится значок; перетащите этот значок на 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];
                     }];
}