Ios iPhone:如何从左到右制作presentModalViewController动画

Ios iPhone:如何从左到右制作presentModalViewController动画,ios,modal-dialog,modalviewcontroller,presentmodalviewcontroller,Ios,Modal Dialog,Modalviewcontroller,Presentmodalviewcontroller,我正在演示带有动画的模型视图。默认情况下,它从下到上。如何使动画从左向右移动?我知道我可以用导航控制器。但实际上,呈现视图不需要导航栏,而且模式呈现视图也不需要导航栏。我仍然希望从左到右转换。只有四种uimodaltransationstyles: UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitio

我正在演示带有动画的模型视图。默认情况下,它从下到上。如何使动画从左向右移动?我知道我可以用导航控制器。但实际上,呈现视图不需要导航栏,而且模式呈现视图也不需要导航栏。我仍然希望从左到右转换。

只有四种
uimodaltransationstyle
s:

UIModalTransitionStyleCoverVertical
UIModalTransitionStyleFlipHorizontal
UIModalTransitionStyleCrossDissolve
UIModalTransitionStylePartialCurl

就像你说的,导航控制器会朝那个方向推进。如果您不想使用它,您必须自己制作视图的动画。

您可以尝试以下方法:

   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];

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

我在实现Matthew的解决方案时遇到问题,因为在动画过程中显示模式视图的视图将不可见(相反,显示视图将替换为窗口背景,然后模式视图将在该背景上设置动画)这导致了不和谐的体验。相反,我将模态视图作为子视图添加到呈现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];
                }];

希望这能有所帮助。

只是想显示另一个选项-此选项允许您使用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);
                     }];

通过使用以下代码,可以在显示视图控制器时从右向左设置动画

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];

我还没有这样做,但基本上您将实例化viewController,将其
隐藏属性设置为
,显示模式控制器,将其
frame.origin.x
移动到
-320
(在纵向模式下),将其
hidden
属性设置为
NO
,开始动画块,在
frame.origin.x
中设置
1.0
1.5
秒,然后开始动画。感谢您的回答。它给了我两个编译错误。我也不太确定这是在做什么。它正在做我想做的事情前面建议:创建viewController,将其帧设置为屏幕左侧的宽度,启动持续1秒的动画块,告诉UIKit动画师应将viewController向右移动,直到在1秒内填满屏幕,然后执行动画。您的编译错误是什么?很可能您不希望像这样创建一个空的viewController,而是在viewController的类中替换第一行中的两个位置
UIViewController
。在上面的第5条语句中:初始化整数“int”的转换无效,应为块指针。在上面的第7条语句中:赋值A的左操作数需要左值wesome解决方案,这对我来说真的很好,但我遇到了一个问题。你知道为什么在视图动画中我会得到一个黑色的闪光吗?一个可能的副本,以及一个反向的从右到左的动画来解除modalViewController的附加信息:-可能的副本