web-dev-qa-db-ja.com

iOS7のカスタムトランジションでハーフモーダルビューコントローラーを上に表示する方法

メインビューコントローラーの上に「ハーフビュー」コントローラーを表示するにはどうすればよいですか?

要件:-メインビューコントローラーの上部をスライドする2番目のビューコントローラーを提示します。 -セカンドビューコントローラーは、メインビューコントローラーの半分以上のみを表示する必要があります-メインビューコントローラーは、セカンドビューコントローラーの背後に表示されたままにする必要があります(透明な背景、下に黒は表示されません)-セカンドビューコントローラーは、モーダル垂直カバーと同様のアニメーションでアニメーション化する必要があります。 iOS 7カスタムトランジション-2番目のビューコントローラーがアクティブな場合でも、ユーザーはメインビューコントローラーのボタンを操作できます(つまり、2番目のビューコントローラーはメインビューコントローラー全体をカバーしません)r-2番目のビューコントローラーには独自の複雑なロジックがあります(単純にすることはできません)ビュー)-ストーリーボード、Segues、iOS 7のみ-iPhoneのみ、iPadではありません。

モーダルビューコントローラーを試してみましたが、メインビューコントローラーとの対話ができません。誰かがiOS7カスタムトランジションまたは別の方法でこれを行う方法の例を提供できますか?.

14
johnsampson

これを行う1つの方法は、「ハーフモーダル」コントローラーを子ビューコントローラーとして追加し、そのビューを所定の位置にアニメーション化することです。この例では、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;
        }];
    }
}
26
rdelmar