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

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


person TWcode    schedule 11.11.2011    source источник


Ответы (3)


Эта пользовательская последовательность возвращается к корню стека навигации. Используйте обычное всплывающее окно вместо «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
person T.J.    schedule 01.12.2011

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

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

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

Больше можно найти в этом сообщении, которое я написал: ссылка.

person tiguero    schedule 29.02.2012

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

Вот пользовательский переход

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

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

person Nick Turner    schedule 17.08.2012
comment
Я использовал код, подобный этому, в проекте, который я делаю, как вы вернетесь к исходному представлению, которое заменяет новое представление. - person user1282180; 24.11.2012