Iphone 从侧面显示UIViewController

Iphone 从侧面显示UIViewController,iphone,uiviewanimationtransition,Iphone,Uiviewanimationtransition,我试图从侧面展示UIViewController。 当前模态唯一能做的就是垂直滑动 有人对此有什么想法吗 让我知道‘谢谢我这样做了,效果很好,但我不知道是否有更正式的方式(UIVIewAimationTransition没有幻灯片选项): 我做到了这一点,而且效果很好,不过我不知道是否有更正式的方法(UIVIewAimationTransition没有幻灯片选项): 要分析的是,它实际上是你移动的视图,而不是控制器 我建议这样做的方法是使用导航控制器,默认情况下,它的动画是水平幻灯片,您可以免费

我试图从侧面展示UIViewController。 当前模态唯一能做的就是垂直滑动

有人对此有什么想法吗


让我知道‘谢谢

我这样做了,效果很好,但我不知道是否有更正式的方式(UIVIewAimationTransition没有幻灯片选项):


我做到了这一点,而且效果很好,不过我不知道是否有更正式的方法(UIVIewAimationTransition没有幻灯片选项):

要分析的是,它实际上是你移动的视图,而不是控制器

我建议这样做的方法是使用导航控制器,默认情况下,它的动画是水平幻灯片,您可以免费获得导航堆栈-这意味着您可以自动生成后退按钮,并且可以设置标题和按钮属性,尽管这些属性可以很容易隐藏

使用导航控制器:

在父控制器syth、alloc和init中创建UINAvigationController属性。然后,您可以按照您想要的任何顺序加载控制器,它负责导航

是关于NavController的一个很好的教程(通常与UITableViewController一起使用,但不必如此)

Peng的例子是一个动画,我应该注意,它删除了父视图(根据您的设计,可能不会删除“currentView”-因为您的/a俯视图可能是子视图),因此如果您返回导航,您必须自己处理此问题。

要分析,它实际上是你移动的视图,而不是控制器

我建议这样做的方法是使用导航控制器,默认情况下,它的动画是水平幻灯片,您可以免费获得导航堆栈-这意味着您可以自动生成后退按钮,并且可以设置标题和按钮属性,尽管这些属性可以很容易隐藏

使用导航控制器:

在父控制器syth、alloc和init中创建UINAvigationController属性。然后,您可以按照您想要的任何顺序加载控制器,它负责导航

是关于NavController的一个很好的教程(通常与UITableViewController一起使用,但不必如此)


Peng的示例是一个动画,我应该注意,它删除了父视图(根据您的设计,可能不只是删除“当前视图”-因为/a俯视图可能是子视图)所以,如果你返回,你必须自己处理这个问题。

我刚才回答了另一个非常类似的问题,但这里还是一样,以防人们看到这里

我的应用程序中的所有ViewController都继承自
MyViewController
,除了一些其他默认行为外,它还具有以下属性:

@property(readwrite, nonatomic) BOOL slideFromSide;
该代码:

- (void) presentViewController: (UIViewController*) vc animated: (BOOL) flag completion: (void (^)(void)) completion
{
    BOOL slideIn = NO;
    if ([vc isKindOfClass: [MyViewController class]])
    {
        MyViewController *svc = (MyViewController*) vc;
        slideIn = svc.slideFromSide;
    }

    if (slideIn)
    {
        [self addChildViewController: vc];
        [self.view addSubview: vc.view];

        CGRect frame = vc.view.frame;
        frame.origin.x = frame.size.width;
        vc.view.frame = frame;

        frame.origin.x = 0;
        [UIView animateWithDuration: 0.33
                         animations: ^{
                             vc.view.frame = frame;
                         }
         ];
    }
    else
    {
        [super presentViewController: vc animated: flag completion: completion];
    }
}


- (IBAction) backAction: (id) sender
{
    if (_slideFromSide)
    {
        CGRect frame = self.view.frame;
        frame.origin.x = frame.size.width;
        [UIView animateWithDuration: 0.33
                         animations: ^{
                             self.view.frame = frame;
                         }
                         completion:^(BOOL finished) {
                             [self removeFromParentViewController];
                         }
         ];
    }
    else
    {
        [self dismissViewControllerAnimated: YES completion: nil];
    }
}
然后,在要滑入的ViewController中,我有:

- (id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName: nibNameOrNil bundle: nibBundleOrNil];
    if (self)
    {
        self.slideFromSide = YES;
        // Whatever else you want to do
    }

    return self;
}
调用新的ViewController与正常情况类似:

WhateverViewController *vc = [WhateverViewController alloc] initWithNibName: nil bundle: nil];
[self presentViewController: vc animated: YES completion: nil];

我刚刚回答了另一个非常相似的问题,但这里又是,万一人们看到的是这里

我的应用程序中的所有ViewController都继承自
MyViewController
,除了一些其他默认行为外,它还具有以下属性:

@property(readwrite, nonatomic) BOOL slideFromSide;
该代码:

- (void) presentViewController: (UIViewController*) vc animated: (BOOL) flag completion: (void (^)(void)) completion
{
    BOOL slideIn = NO;
    if ([vc isKindOfClass: [MyViewController class]])
    {
        MyViewController *svc = (MyViewController*) vc;
        slideIn = svc.slideFromSide;
    }

    if (slideIn)
    {
        [self addChildViewController: vc];
        [self.view addSubview: vc.view];

        CGRect frame = vc.view.frame;
        frame.origin.x = frame.size.width;
        vc.view.frame = frame;

        frame.origin.x = 0;
        [UIView animateWithDuration: 0.33
                         animations: ^{
                             vc.view.frame = frame;
                         }
         ];
    }
    else
    {
        [super presentViewController: vc animated: flag completion: completion];
    }
}


- (IBAction) backAction: (id) sender
{
    if (_slideFromSide)
    {
        CGRect frame = self.view.frame;
        frame.origin.x = frame.size.width;
        [UIView animateWithDuration: 0.33
                         animations: ^{
                             self.view.frame = frame;
                         }
                         completion:^(BOOL finished) {
                             [self removeFromParentViewController];
                         }
         ];
    }
    else
    {
        [self dismissViewControllerAnimated: YES completion: nil];
    }
}
然后,在要滑入的ViewController中,我有:

- (id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName: nibNameOrNil bundle: nibBundleOrNil];
    if (self)
    {
        self.slideFromSide = YES;
        // Whatever else you want to do
    }

    return self;
}
调用新的ViewController与正常情况类似:

WhateverViewController *vc = [WhateverViewController alloc] initWithNibName: nil bundle: nil];
[self presentViewController: vc animated: YES completion: nil];

你真的应该接受一些答案!接受率为0%是非常糟糕的,它会阻止人们帮助你。太真实了,尽管我感觉很高兴:你真的应该接受一些答案!接受率为0%是非常糟糕的,它会阻止人们帮助你。太真实了,尽管我感觉很高兴:嗯。。。你在分析MVC模式吗?只是强调你没有从侧面展示一个“控制器”。。。你对MVC模式不满意吗?只是强调你没有从侧面显示“控制器”,比如说我想删除视图,让它看起来像是从右边回来的。我是否要更改子类型?是的,子类型将更改动画的方向。您需要将以下内容添加到viewcontroller的顶部:#导入表示我要删除视图,并使其看起来像是从右侧返回的。我是否要更改子类型?是的,子类型将更改动画的方向。您需要将以下内容添加到viewcontroller的顶部:#导入