Как использовать жест встряхивания при использовании раскадровок? - PullRequest
0 голосов
/ 15 февраля 2012

Я сделал приложение, где вы встряхиваете телефон, чтобы открыть новый вид. Все вместе три вида, и когда вы трясете телефон на последнем экране, вы возвращаетесь на первый экран. Это прекрасно работает, когда я создаю новое представление элементов управления подкласса с собственным .xib. Но я хотел бы использовать это в проекте раскадровки, что мне нужно изменить?

Заранее большое спасибо!

ЗДЕСЬ КОД В .H:

#import <UIKit/UIKit.h>
#import "FirstScreenViewController.h"
#import "SecondScreenViewController.h"

@ interface ViewController: UIViewController

{

NSInteger currentScreen;
UIViewController* currentController;

}

@ конец

И ЗДЕСЬ В .M:

#import "ViewController.h"

@ реализация ViewController

- (Недействительными) didReceiveMemoryWarning

{

[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.

}

#pragma mark shake

- (BOOL) canBecomeFirstResponder

{

return true;

}

- (void) motionEnded: (UIEventSubtype) motion withEvent: (UIEvent *) событие

{

if(motion == UIEventSubtypeMotionShake)

{

if (currentController)

{

[currentController.view removeFromSuperview]; currentController = ноль;

    }

    switch (currentScreen)

{* * тысяча пятьдесят-один

        case 0:
            currentController = [[FirstScreenViewController alloc] initWithNibName:@"FirstScreenViewController" bundle:nil];
            break;
        case 1:
            currentController = [[SecondScreenViewController alloc] initWithNibName:@"SecondScreenViewController" bundle:nil];

    }


    if(currentController)

{

        [currentController.view setFrame:self.view.bounds];
        [self.view addSubview:currentController.view];

    }

    currentScreen++;
    if(currentScreen >2)
        currentScreen=0;

}

}

#pragma mark - View lifecycle

- (Недействительными) viewDidLoad

{

[super viewDidLoad]; currentScreen = 0;

}

- (Недействительными) viewDidUnload

{

[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;

}

@ конец

1 Ответ

1 голос
/ 16 февраля 2012

Вам необходимо добавить все три контроллера вида в раскадровку и иметь между ними сегменты (включая один обратно к первому из третьего) и распознаватель жестов дрожания, прикрепленный к каждой сцене.

Метод действия для каждого распознавателя жестов сообщает контроллеру представления performSegue: с соответствующим идентификатором segue.

...