Вопрос

Я пытаюсь реализовать флип-переход в стиле iBooks в качестве раскадровки.Переход должен подтолкнуть соотв.лопни destinationViewController в/из стека UINavigationControllers.

Я могу использовать контроллеры просмотра в своих переходах. perform метод, но я не могу поп.Когда я вставляю контроллер сразу после создания анимации переворота, анимация не запускается, и ее обратный вызов - это должно сработать. [[UIApplication sharedApplication] endIgnoringInteractionEvents] мне никогда не звонят, и мое приложение не работает.

Поэтому я попытался нажать/вставить animationDidStop:anim:flag делегата, но он никогда не вызывается с флагом, установленным в true.

Я предполагаю, что переход освобождается до вызова метода делегата.Что еще я мог сделать?

Это было полезно?

Решение

Простите меня, если я совершенно неправильно понимаю этот вопрос, но похоже, что вы просто хотите выполнить базовое горизонтальное переворот вперед и назад между двумя контроллерами представления.И даже если вы уже это поняли, возможно, это поможет всем, у кого возник тот же вопрос.

(1) В вашей раскадровке (которая имеет ViewController A и B) создайте модальный переход от A к B.Дайте ему идентификатор (showViewControllerB) и выберите «Переход: Отразить по горизонтали».

Настраиваем протокол и делегатов:

(2a) В ViewControllerB.h добавьте выше @interface:

@class ViewControllerB;

@protocol ViewControllerBDelegate
    - (void)viewControllerBDidFinish:(ViewControllerB *)controller;
@end

(2b) Добавьте делегата как свойство:

@property (weak, nonatomic) id <ViewControllerBDelegate> delegate;

(3a) В ViewControllerB.m синтезируйте:

@synthesize delegate;

(3b) И делегируем метод обратного переворота:

- (IBAction)flipBack:(id)sender
{
    [self.delegate viewControllerBDidFinish:self];
}

(4) В ViewControllerA.h добавьте в самом верху #import "ViewControllerB.h" и в конце @interface <ViewControllerBDelegate>

(5a) В ViewControllerA.m добавьте метод, соответствующий протоколу:

- (void)viewControllerBDidFinish:(ViewControllerB *)controller
{
    [self dismissModalViewControllerAnimated:YES];
}

(5b) Затем установите его в качестве делегата в prepreForSegue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"showViewControllerB"]) {
        [[segue destinationViewController] setDelegate:self];
    }
}

Надеюсь, это ответит на ваш вопрос.Если я неправильно понял, просто дайте мне знать.

Другие советы

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

Если я вставлю viewController в стек контроллера навигации и установлю для стиля перехода раскадровки значение Push, он будет вставлен в представление справа налево.Появится кнопка «Назад», в которой будет отображаться заголовок представляющего ViewController.

Если я установлю стиль перехода раскадровки на модальный, я могу установить переход на переворот по горизонтали (кажется, это то, что вы хотите).Но тогда кнопка «Назад» не появится.В представленномViewController я закрываю представление с помощью:

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];

Он перевернет второй вид назад с помощью поворота вправо.

Но это грязное решение, и Apple не рекомендует его.

http://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ManagingDataFlowBetweenViewControllers/ManagingDataFlowBetweenViewControllers.html#//apple_ref/doc/uid/TP40007457-CH8-SW9

Люк Дуберт привел пример реализации делегата.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top