我想在可见屏幕之外创建一个视图并推送它(就像默认的pushViewController动画一样),但我无法在外面创建UIView。我在这里尝试了这段代码,但它不起作用。视图始终在当前 UIScreen 边界中创建和显示。这意味着不是两个视图,一个被推出和一个被推入,只有出去的视图"移动",新视图只是坐在它的位置。
在 .m 视图中显示:
- (void)viewDidLoad
{
[super viewDidLoad];
// set the views frame off the screen
self.view.frame = CGRectMake(320, 0, 320, 460);
}
在实际执行转换的方法中:
-(void)showOverview:(UIViewController *)sender //sender = mapviewController
{
NSLog(@"overview");
// current view (frame) = mapviewCOntroller.view
CGRect outFrame = self.view.frame;
if (!self.overviewViewController) {
self.overviewViewController = [[UCOverviewViewController alloc] init];
self.overviewViewController.transitionDelegate = self;
// create a new View for the overview
[self.overviewViewController.view setCenter:self.view.center];
[self.view.window addSubview:self.overviewViewController.view];
[self.view.window bringSubviewToFront:self.mapViewController.view];
}
CGRect inFrame = self.overviewViewController.view.frame;
outFrame.origin.x = outFrame.origin.x-outFrame.size.width;
inFrame.origin.x = self.view.frame.origin.x;
[UIView animateWithDuration:0.5f animations: ^{
[self.view setFrame:outFrame];
}];
}
编辑:这是我的最终代码,至少是重要的部分。现在,当前可见的视图在屏幕外视图滑入的同时将滑块滑入屏幕。
-(void)showOverview
{
if (!self.overviewViewController) {
NSLog(@"OverviewViewController created!");
self.overviewViewController = [[UCOverviewViewController alloc] init];
self.overviewViewController.transitionDelegate = self;
// add the subView
[self.view addSubview:self.overviewViewController.view];
[self.view sendSubviewToBack:self.overviewViewController.view];
}
CGRect outFrame = self.mapViewController.view.frame;
CGRect inFrame = self.overviewViewController.view.frame;
outFrame.origin.x -= outFrame.size.width;
inFrame.origin.x = self.view.frame.origin.x;
self.isOverviewViewVisible = YES;
[UIView animateWithDuration:0.5f animations: ^{
[self.mapViewController.view setFrame:outFrame];
[self.overviewViewController.view setFrame:inFrame];
}];
}
你的问题是这一行。
self.overviewView = self.overviewViewController.view;
您正在使用已有的视图覆盖您创建的视图。
以下不是一个很好的方法,但它应该适用于我认为您拥有的东西。
- (void)viewDidLoad {
self.overviewViewController.view.frame = CGRectMake(320, 0, 320, 460);
self.overviewViewController.view.backgroundColor = [UIColor blueColor];
}
然后,您需要另一个操作来执行动画。
[UIView animateWithDuration:0.5f animations: ^{
self.overviewViewController.view.frame = CGRectMake(0,0,320,460);
}];
你的代码中有一些奇怪和不正确的东西,让人难以理解实际发生的事情,但是......忘记在任何地方使用窗口。 你唯一需要担心的,就是这个。 说视图 A 是您的主要视图。 视图 B 是您想要在外面进入的视图,并且越过 A 进入。 然后,从笔尖或手动创建 B,将其作为子视图添加到视图 A 中,在输入动画块将其移动到位之前,请确保当前帧设置为 {ViewA.bounds.size.width, 0, ViewB.bounds.size.width, ViewB.bounds.size.height}。 假设您希望它从右上角进入。