3

私のアプリには分割されたマスター/詳細インターフェイスがあります。ユーザーが画面の詳細側で特定のボタンを押すとUIModalTransitionStyleFlipHorizontal modalTransitionStyle、新しいコントローラーをモーダルに表示し、詳細パネルが「反転した」ように表示できるように を使用します。 "新しいインターフェースに。

これは iPhone では問題なく動作しますが、iPad で試してみると、新しいモーダル コントローラーが画面の詳細側から反転しますが、アニメーションの最後では画面全体を覆っています。

画面の詳細側でのみコントローラーを反転させるにはどうすればよいですか?

4

3 に答える 3

4

これをまだ理解していない場合は、ほぼ完了です。スーパービュー全体ではなく詳細ビューでのみ動作するように、「現在のコンテキスト」のモーダル ビューのプレゼンテーション コンテキストを定義する必要があります。

これを行う最も簡単な方法は、セグエを使用してストーリーボードでビューをセットアップすることです。IB で、新しいビュー コントローラーを作成し、セグエを追加し、「フリッパー」という名前を付けてセグエ行を編集し、モーダルに設定し、フリップに設定し、プレゼンテーションを「現在のコンテキスト」に設定します。

これらのプロパティが設定されたら、View Controller にセグエできますが、次のように詳細 View Controller から開始します。

[self performSegueWithIdentifier:@"flipper" sender:self];

コードで移行を行う必要がある場合は、次のようになります。

UIViewController *abc = [self.storyboard instantiateViewControllerWithIdentifier:@"flipper"];
[abc setModalPresentationStyle:UIModalPresentationCurrentContext];
[abc setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[self presentViewController:abc animated:YES completion:nil];

よくなって。

于 2012-09-26T12:51:21.200 に答える
0

私の問題は、通常のコントローラーからコントローラーを提示していたことでしたがUIViewController、分割ビューコントローラーから提示する必要がありました。

于 2012-09-26T12:29:43.987 に答える
0

私にとっては、正しい方法(アニメーションのトランジションを表示する)とハッキーな方法(コントローラーをモーダルに提示することで汚れる)の2つのオプションがあります。

まず、ハッキーな方法で、モーダルビューコントローラーを表示できます。ご存知のように、モーダルビューコントローラーが画面を引き継ぎ、表示されている間は唯一のアクセス可能なコントローラーですが、サイズを変更して、の詳細セクションの上に表示されるようにすることができます。画面のみの場合、ここでの問題は、サイズ変更や置き忘れを意図したものではなく、回転が発生したときに問題が発生しやすいことです。UISplitViewControllerまた、このコントローラーが存在する間は、マスター部分と対話することはできません。

これは、たとえば次のように実行できます。

UIViewController *detail = [[UIViewController alloc] init];

detail.modalPresentationStyle = UIModalPresentationFormSheet;
detail.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

if([self respondsToSelector:@selector(presentViewController:animated:completion:)]){
    [self presentViewController:detail animated:YES completion:nil];
}else{
    [self presentModalViewController:detail animated:YES];
}

detail.view.superview.frame = CGRectMake(320.0, 0.0, self.view.frame.size.width - 320.0, self.view.frame.size.height);

[detail release];

詳細ビューコントローラビューのスーパービューの中心を調整する必要があるかもしれません...これはお勧めしません。

もう1つの解決策はUIView、詳細ビューコントローラ内のアニメーションを使用してビューを入れ替え、アニメーション化して反転させることです。

それがどのように見えるかを確認するには、iOS用のFacebookアプリをチェックしてください。会話中にチャットで右上の[...]ボタンをタップすると、ビューのコンテンツが反転し、通知を調整できます。その人/チャットの設定。

たとえば、詳細ビューコントローラのボタンをタップすると、次のことができます。

UIViewController *someOtherController = [...];

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.8];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
                       forView:self.view
                         cache:YES]; 

[self.view addSubview:someOtherController.view];

[UIView commitAnimations];

あなたはそれを取り除くために逆をするでしょう。

于 2012-10-13T03:20:38.930 に答える