【发布时间】:2011-12-27 04:45:38
【问题描述】:
我正在使用情节提要来创建我的新 iPad 项目。我想使用自定义模态 segue 在视图之间进行更好的转换。我的问题是如何使用自定义模态,是否有任何教程显示使用自定义模态 segues?
【问题讨论】:
我正在使用情节提要来创建我的新 iPad 项目。我想使用自定义模态 segue 在视图之间进行更好的转换。我的问题是如何使用自定义模态,是否有任何教程显示使用自定义模态 segues?
【问题讨论】:
此自定义序列会弹回导航堆栈的根目录。如果您想返回一级,请使用普通弹出窗口而不是“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 提供的当前教程是在导航控制器中执行定制的 segue。如果您正在寻找模态转场,我相信您需要调用:
[self.sourceViewController presentModalViewController:self.destinationViewController animated:NO];
并更改动画的选项。
可以在我写的这篇文章中找到更多信息:link。
【讨论】:
我发现这是最简单的方法,而不是编写大量代码来滑动框架。
这是自定义转场
- (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]; }];
}
希望这会有所帮助!
【讨论】: