0

画面全体をカバーする vc1.view があり、vc1.view を暗くしたり、vc2.view を画面全体にズームしたりしたいと考えています。

アプリにナビゲーション コントローラーがないので、目標を達成するためのベスト プラクティスは何ですか? 私が考えている解決策は次のとおりです。

  • vc1.view と vc2.view の両方を共通のコンテナー ビューに追加します。
  • [UIView transitionFromView:vc1.view toView:vc2.view ......] を使用します。

異なる VC のビューを共通のコンテナー ビューに追加する必要があるという考えは嫌いです。助言がありますか?前もって感謝します。

4

2 に答える 2

2

transitionFromView:toView:... を使用すると、新しいビューを共通のコンテナに追加する必要がなくなります。これは、transition メソッドがビューの追加を処理するためです。以下は私のために働いた。コードは、ビューが「ビューから」であるView Controllerにあります。ここではクロス フェードを使用していますが、他の利用可能な方法のいずれかに変更できます。

-(void)switchViews:(id)sender {
    UIWindow *win = self.view.window;
    YellowController *yellow = [self.storyboard instantiateViewControllerWithIdentifier:@"Yellow"];
    yellow.view.frame = self.view.frame;
    [UIView transitionFromView:self.view toView:yellow.view duration:2 options:UIViewAnimationOptionTransitionCrossDissolve completion:^(BOOL finished) {
        win.rootViewController = yellow;
    }];
}

ただし、カスタムトランジションを行うには、「ビューから」が含まれているビューのサブビューとして新しいビューを追加する必要があります(私は思います)。この例では、それがウィンドウのビューです。このコードは、古いビューの中心から新しいビューを拡大しますが、そのビューはフェードアウトします。遷移の最後に、View Controller は新しいビューを所有するもの (この場合は黄色) に切り替えられます。

編集後: CGAffineTransform を使用するようにこのメソッドを変更しました (私の質問への回答で提案された jrturton に感謝します):

-(void)switchViews3:(id)sender {
    UIWindow *win = self.view.window;
    YellowController *yellow = [self.storyboard instantiateViewControllerWithIdentifier:@"Yellow"];
    yellow.view.frame = self.view.frame;
    yellow.view.transform = CGAffineTransformMakeScale(.1, .1);
    [win addSubview:yellow.view];

    [UIView animateWithDuration:.6 animations:^{
        yellow.view.transform = CGAffineTransformIdentity;
        self.view.alpha = 0;
    }
                 completion:^(BOOL finished) {
                     [self.view removeFromSuperview];
                     win.rootViewController = yellow;
                 }];

}

于 2012-12-15T00:49:29.110 に答える
1

ナビゲーション コントローラーを使用せずに vc1 から vc2 に表示するには、次を使用します。

[vc1 presentViewController:vc2 animated:YES completion:nil];

表示スタイルを変更するために、Apple はいくつかの方法を提供しています。上記のコードを呼び出す前に設定する必要があります。

vc2.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

リストは次のとおりです。

typedef enum {
   UIModalTransitionStyleCoverVertical = 0,
   UIModalTransitionStyleFlipHorizontal,
   UIModalTransitionStyleCrossDissolve,
   UIModalTransitionStylePartialCurl,
} UIModalTransitionStyle;
于 2012-12-15T00:35:03.980 に答える