Я использую раскадровку для создания своего нового проекта для iPad. Я хочу использовать пользовательский модальный переход, чтобы лучше переходить между представлениями. Мой вопрос в том, как мне использовать пользовательский модальный режим, и есть ли какие-либо учебные пособия, которые показывают использование пользовательских модальных переходов?
Как создать собственный модальный переход в 4.2 Xcode с помощью раскадровки
Ответы (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
Я искал что-то подобное и нашел текущий ответ немного вводящим в заблуждение. Текущее руководство, представленное TJ, выполняет настраиваемый переход в навигационном контроллере. Если вы ищете модальный переход, я считаю, что вместо этого вам нужно позвонить:
[self.sourceViewController presentModalViewController:self.destinationViewController animated:NO];
и измените параметры вашей анимации.
Больше можно найти в этом сообщении, которое я написал: ссылка.
Я считаю, что это самый простой способ, чем писать кучу кода, чтобы просто сдвинуть кадр.
Вот пользовательский переход
- (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]; }];
}
Надеюсь это поможет!