UIView内のUiView遷移

interface-builder ipad iphone objective-c uiviewcontroller
UIView内のUiView遷移

これは初心者の質問のように感じますが、意図した方法で機能させることができないため、どこかで正しい方向に向けられることを望んでいます。

私が達成しようとしているのは、ビュー内のビューの遷移です。 基本的に、ビュー内のビューを別のview(controller?!?)のコンテンツに置き換えたいと思います。

たとえば、本の画像があり、本の中で別のページに移行したい場合(たとえば、カレンダービューから詳細な日次ビューに移動したい)を考えてみましょう。 私は「ブックコンテンツ」(白いコンテンツ領域)をそのトランジションに含めたいだけで、ブック全体(画面全体)には含めません。

同じビューでトランジションを行うことができますが、問題はありませんが、ビューを完全に異なるビューに置き換えようとしてもうまくいきません。 ビューを別々のViewControllerに配置しても、すべてのビューを1つのViewControllerに配置してもかまいません。そのため、まだ機能させることはできませんでしたが、さらに悪いことに、アイデアが足りません。 だから助けて! 誰かがとても親切で、私が間違っていることを教えてください。 提案も大歓迎です。 ありがとうございます。

Tom

  2  1


ベストアンサー

UIView Animationsブロックを使用して、1つのビューを非表示にしてから他のビューを表示できます。

[UIView beginAnimations:nil context:nil];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:view1.view cache:YES];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:view2.view cache:YES];
[UIView setAnimationDuration: 1.5];
[UIView commitAnimations];

view1.view.hidden = YES;
view2.view.hidden = NO;

*編集:*これはあなたが探していたものですか?

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];
[view1 viewWillDisappear:YES];
[view2 viewWillAppear:YES];

view1.view.hidden = YES;
view2.view.hidden = NO;
[view1 viewDidDisappear:YES];
[view2 viewDidAppear:YES];
[UIView commitAnimations];

または、次のようなものを使用できます。

[UIView animateWithDuration:0.5
                  delay:0.0
                options:UIViewAnimationOptionTransitionFlipFromRight
             animations:^{
                             [view1 removeFromSuperview];
                             [mySuperview addSubview:view2];
                         }
             completion:nil];

3


UIView classの `exchangeSubviewsAtIndex:`メソッドを確認してください。 移行する2つのビューを、別のビューのサブビューとして設定するだけです。次に、その親ビューでこのメソッドを呼び出します。

1


AとBの2つのビューを持つView Controllerがあるとします。 本のページを表示するために、コントローラのビューで同じスペースを占めるように、それらは同一のフレームを持っています。 一方を表示し、もう一方への移行を行います。

1つの方法は、一方のアルファプロパティを1.0(不透明)に設定し、もう一方を0.0(透明)に設定することです。 このプロパティはアニメーション化できるので、beginAnimations:context / commitAnimationsを使用して一方から他方へフェードするか、ドキュメントのアドバイスのようなブロックメソッドのいずれかを使用できます。

別の方法は、2つのビューのフレームの変化をアニメーション化することです。 表示するのに適切な場所にフレームがあるようにビューを設定し、もう一方は同じフレームを持つが、frame.origin.xがframe.size.widthに等しい-オフであるため非表示になります-スクリーンまたは他のビューの後ろに隠れています。 ビューAのframe.origin.xを-frame.size.widthに設定し、フレームBのframe.origin.xを表示位置xの原点に設定して、フレームをアニメーション化します。 次に、フレームAのframe.origin.x(アニメーションなし)を再びframe.origin.widthに設定し、コンテンツを更新すると、右から別のページをスライドする準備ができました。

0


タイトルとURLをコピーしました