iPhone:如何从左到右做一个presentModalViewControlleranimation

我用animation呈现模型视图。 作为默认,它是从下到上。 我怎样才能使animation从左到右? 我知道我可以使用导航控制器。 但实际上,呈现视图不需要导航栏,模态呈现视图也不需要导航栏。 我仍然想要从左到右的过渡。

只有四个UIModalTransitionStyle

 UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl 

就像你说的那样,一个导航控制器会这样推。 如果你不想使用它,你必须自己animation视图。

您可以通过使用以下代码呈现视图控制器时从右向左进行animation处理

 CATransition *transition = [CATransition animation]; transition.duration = 0.4; transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; transition.type = kCATransitionPush; transition.subtype = kCATransitionFromRight; [self.view.window.layer addAnimation:transition forKey:nil]; [self presentViewController:localitiesView animated:NO completion:nil]; 

我遇到了一个实现Matthew解决scheme的问题,因为在animation过程中呈现我的模态视图的视图将不可见(取而代之的是呈现视图将被replace为Window背景,然后模态视图会对其进行animation处理),这导致了令人不安的体验。 相反,我已经将模态视图作为子视图添加到呈现UIViewController的视图,并将其animation化。 我有一个不同的animation请求,所以我试图改变一些值来表示你描述的animation,但我没有真正testing下面的代码。

  UIViewController *modalView = //init your UIViewController [modalView loadView]; CGRect finalFrame = modalView.view.frame; [modalView.view setFrame:CGRectMake(-320, 0, self.view.frame.size.width, self.view.frame.size.height)]; [UIView animateWithDuration:1.0 animations:^{ [self.navigationController setNavigationBarHidden:YES]; [self.view addSubview:modalView.view]; [modalView.view setFrame:finalFrame]; }]; 

希望这可以帮助。

UINavigationController具有navigationBarHidden属性 – 如果将其设置为YES,则可以在没有可见导航栏的情况下获得从左到右的过渡样式和导航控制器的其他细节。

只是想显示另一个选项 – 这一个让你从上到下呈现视图,使用UIViewanimation。 请注意,您必须以隐藏状态添加新视图 – 确保animation从视图完全加载开始。

 AddViewController *controller = [[AddViewController alloc] initWithNibName:@"AddViewController" bundle:[NSBundle mainBundle]]; controller.blogs = self.blogs; UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller]; navController.toolbarHidden = YES; navController.navigationBarHidden = YES; self.modalPresentationStyle = UIModalPresentationCurrentContext; [self presentModalViewController:navController animated:NO]; navController.view.frame = CGRectMake(0, -480, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 20); navController.view.hidden = NO; [UIView animateWithDuration:0.3 animations:^{ navController.view.frame = CGRectMake(0, 20, navController.view.frame.size.width, navController.view.frame.size.height); }]; 

你可以尝试这样的事情:

  UIViewController *fooViewController = [[[UIViewController alloc] init] autorelease]; CGSize theSize = CGSizeMake(320, 460); fooViewController.view.frame = CGRectMake(0 - theSize.width, 0, theSize.width, theSize.height); [UIView beginAnimations:@"animationID" context:NULL]; fooViewController.view.frame = CGRectMake(0, 0, 320, 460); [UIView commitAnimations]; 

一个可能的重复与附加信息解散modalViewController反向从右到左的animation,以及: – dismissModalViewController与过渡:从左到右