Как создать собственный modal segue в 4.2 Xcode с помощью раскадровки

Я использую раскадровку для создания своего нового проекта iPad. Я хочу, чтобы пользовательский modal segue имел лучшие переходы между представлениями. Мой вопрос заключается в том, как использовать пользовательский модальный метод и есть ли там учебники, показывающие использование пользовательских модальных сегментов?

Ответы

Ответ 1

Этот пользовательский сегмент возвращается в корень стека навигации. Используйте обычный поп вместо "popToViewController", если вы хотите вернуться на один уровень. Мне просто нравится имя этого метода.

Заголовок:

#import <UIKit/UIKit.h>

@interface FlipTopPopToRoot : UIStoryboardSegue

@end

реализация:

#import "FlipTopPopToRoot.h"

@implementation FlipTopPopToRoot

- (void) perform {

UIViewController *src = (UIViewController *) self.sourceViewController;
[UIView transitionWithView:src.navigationController.view duration:0.5
                   options:UIViewAnimationOptionTransitionFlipFromTop
                animations:^{
                    [src.navigationController popToViewController:[src.navigationController.viewControllers objectAtIndex:0] animated:NO];;
                }
                completion:NULL];
}

@end

Ответ 2

Я искал что-то похожее и нашел, что текущий ответ немного вводит в заблуждение. В текущем учебном пособии, представленном TJ, выполняется настраиваемый сегмент в навигационном контроллере. Если вы ищете modal segue, я считаю, что вам нужно позвонить:

 [self.sourceViewController presentModalViewController:self.destinationViewController animated:NO];

и измените параметры анимации.

Подробнее об этом сообщении я написал: ссылка.

Ответ 3

Я считаю, что это самый простой способ, а не писать кубики кода, чтобы просто сместить кадр.

Здесь пользовательский segue

- (void) perform {
    UIView *oldView = ((UIViewController *)self.sourceViewController).view;
    UIView *newView = ((UIViewController *)self.destinationViewController).view;

    [oldView.window insertSubview:newView aboveSubview:oldView];
    float offsetY = newView.center.y  - oldView.center.y ;
    //NSLog(@"old y = %f, new y = %f , offsetY = %f", oldView.center.y, newView.center.y, offsetY);


    // assuming newView and oldView both sized to fill screen,
    //   position newView just to the right of oldView

    newView.center = CGPointMake(oldView.center.x + oldView.frame.size.width, oldView.center.y + offsetY);
    //NSLog(@"newView center x = %f y = %f", newView.center.x, newView.center.y);
    // slide newView over oldView, then remove oldView
    [UIView animateWithDuration:0.3
                     animations:^{ newView.center = CGPointMake(oldView.center.x, oldView.center.y + offsetY);}
                     completion:^(BOOL finished){ [oldView removeFromSuperview]; }];
}

Надеюсь, это поможет!