14

我将如何在主视图控制器的顶部呈现“半视图”控制器?

要求: - 提供第二个视图控制器,它滑过主视图控制器的顶部。- 第二个视图控制器应该只显示超过一半的主视图控制器 - 主视图控制器应该在第二个视图控制器后面保持可见(透明背景,下面不显示黑色) - 第二个视图控制器应该使用类似于模态垂直覆盖的动画进行动画处理,或者iOS 7 自定义过渡 - 当第二个视图控制器处于活动状态时,用户仍然可以与主视图控制器上的按钮进行交互(即第二个视图控制器不覆盖整个主视图控制器)r - 第二个视图控制器有自己的复杂逻辑(不能简单视图) - 故事板、Segues、仅限 iOS 7 - 仅限 iPhone,而不是 iPad。

我尝试过使用模态视图控制器,但这不允许与主视图控制器进行交互。有人可以提供一个如何使用 iOS7 自定义转换或其他方法执行此操作的示例。

4

1 回答 1

26

一种方法是将“半模态”控制器添加为子视图控制器,并为其视图设置动画。对于此示例,我在情节提要中创建了“半模态”控制器,其框架高度为 4 英寸 iPhone 屏幕的一半。您可以使用更多动态方法来考虑不同的屏幕尺寸,但这应该可以帮助您入门。

@interface ViewController ()
@property (strong,nonatomic) UIViewController *modal;
@end

@implementation ViewController


- (IBAction)toggleHalfModal:(UIButton *)sender {
    if (self.childViewControllers.count == 0) {
        self.modal = [self.storyboard instantiateViewControllerWithIdentifier:@"HalfModal"];
        [self addChildViewController:self.modal];
        self.modal.view.frame = CGRectMake(0, 568, 320, 284);
        [self.view addSubview:self.modal.view];
        [UIView animateWithDuration:1 animations:^{
            self.modal.view.frame = CGRectMake(0, 284, 320, 284);;
        } completion:^(BOOL finished) {
            [self.modal didMoveToParentViewController:self];
        }];
    }else{
        [UIView animateWithDuration:1 animations:^{
            self.modal.view.frame = CGRectMake(0, 568, 320, 284);
        } completion:^(BOOL finished) {
            [self.modal.view removeFromSuperview];
            [self.modal removeFromParentViewController];
            self.modal = nil;
        }];
    }
}
于 2014-04-05T00:59:36.447 回答