12

我正在展示一个带有动画的模型视图。默认情况下,它是从下到上的。如何使动画从左到右?我知道我可以使用导航控制器。但实际上呈现视图不需要导航栏,模态呈现视图也不需要导航栏。我仍然想要从左到右的过渡。

4

6 回答 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

只有四个UIModalTransitionStyles:

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 回答