我正在展示一个带有动画的模型视图。默认情况下,它是从下到上的。如何使动画从左到右?我知道我可以使用导航控制器。但实际上呈现视图不需要导航栏,模态呈现视图也不需要导航栏。我仍然想要从左到右的过渡。
问问题
16940 次
6 回答
15
您可以使用以下代码在呈现视图控制器时从右到左进行动画处理
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];
于 2013-11-20T11:51:45.820 回答
10
只有四个UIModalTransitionStyle
s:
UIModalTransitionStyleCoverVertical
UIModalTransitionStyleFlipHorizontal
UIModalTransitionStyleCrossDissolve
UIModalTransitionStylePartialCurl
就像你说的那样,导航控制器会这样推动。如果您不想使用它,则必须自己为视图设置动画。
于 2010-12-27T20:03:09.867 回答
4
我在实现 Matthew 的解决方案时遇到了问题,因为在动画期间呈现我的模态视图的视图将不可见(相反,呈现视图将被替换为 Window 背景,然后模态视图将对其进行动画处理),这导致了不和谐的体验. 相反,我将模态视图作为子视图添加到呈现的 UIViewController 的视图中,并对其进行动画处理。我请求了不同的动画,因此我尝试更改一些值以表示您所描述的动画,但我尚未实际测试下面的代码。
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];
}];
希望这可以帮助。
于 2011-05-12T15:05:56.317 回答
2
UINavigationController
有一个navigationBarHidden
属性——如果你把它设置为 YES,你可以获得从左到右的过渡风格和导航控制器的其他细节,而没有可见的导航栏。
于 2010-12-27T21:04:53.730 回答
1
只是想显示另一个选项 - 这个选项允许您使用 UIView 动画从上到下呈现视图。请注意,您必须在隐藏状态下添加新视图 - 确保动画从完全加载的视图开始。
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);
}];
于 2012-11-26T07:26:57.217 回答
0
你可以尝试这样的事情:
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];
于 2010-12-27T20:48:48.810 回答