如何在主视图控制器的顶部显示"半视图"控制器?
要求: - 呈现第二个视图控制器,它在主视图控制器的顶部滑动. - 第二个视图控制器应仅显示主视图控制器的一半以上 - 主视图控制器应保持在第二个视图控制器后面可见(透明背景,下方未显示黑色) - 第二个视图控制器应使用类似于模态垂直覆盖的动画制作动画,或者iOS 7自定义转换 - 当第二个视图控制器处于活动状态时,用户仍然可以与主视图控制器上的按钮交互(即第二个视图控制器不覆盖整个主视图控制器)r - 第二个视图控制器有自己的复杂逻辑(不能简单视图) - 仅限故事板,Segues,iOS 7 - 仅限iPhone,而非iPad.
我尝试过使用模态视图控制器,但这不允许与主视图控制器交互.有人可以提供一个如何使用iOS7自定义转换或其他方法执行此操作的示例.
一种方法是将"半模式"控制器添加为子视图控制器,并将其视图设置到适当位置.在这个例子中,我在故事板中创建了"半模式"控制器,其框架的高度是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; }]; } }