iOS:自定义segue和presentViewController未按预期工作



我正在使用一个自定义segue,它看起来像这样:

@实现模式PushSegue

- (void)perform {
    UIViewController *fromController = self.sourceViewController;
    UIViewController *toController = self.destinationViewController;
    UIView *fromView = fromController.view; 
    UIView *toView = toController.view; 
    CGPoint centerStage = toView.centerStage;
    toView.center = toView.rightStage;
    [fromView.window addSubview:toView];
    [fromController addChildViewController:toController];
    [UIView transitionWithView:toView 
                      duration:0.5 options:0
                    animations:^{
                        toView.center = centerStage;
                    }
                    completion:nil];
}

这样做效果很好,因为视图按预期从右侧滑动,并且控制器被添加到控制器层次结构中。

但后来在添加的控制器中,我这样做:

[self presentViewController:anotherController animated:YES completion:nil];

我希望这能让新控制器的视图以模态的方式在屏幕上滑动。但取而代之的是,新的观点并没有出现。当我后来取下这个控制器时,它的视图会闪烁并从屏幕上滑下,留下黑色背景,而不是原来的视图。

我已经玩了一段时间了,如果我把代码改为

//[self presentViewController:oauthController animated:YES completion:nil];
[self.view addSubview:oauthController.view];
[self addChildViewController:oauthController];

然后,视图将按预期显示,尽管没有调整大小。

我的问题似乎是分段设置层次结构的方式与presentViewController做事的方式。我做了很多阅读和搜索,但到目前为止还不能清楚地了解到底发生了什么

我也试过在segue中使用presentViewController,但不是将新视图放在旧视图上,而是屏幕变黑,然后新视图继续滑动。

感谢您的帮助。

在目标视图控制器(在情节提要中)上设置情节提要ID,然后尝试以下代码:

AnotherController *viewC = [self.storyboard instantiateViewControllerWithIdentifier:@"AnotherController"]; 
ModalPushSegue    *segue = [[ZHCustomSegue alloc] initWithIdentifier:@"coolSegueName" source:self destination:viewC];
[segue perform];

最新更新