1

UiView からこのビューへのトランジション (UIViewAnimationTransitionFlipFromLeft) を開始すると、「戻る」ボタンのある UIToolBar を持つ UIView があります。ボタンはトランジションの最後にのみ表示されます。なぜですか? 助けてください

ありがとう

コード:

[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:0.90];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    UIViewController *coming = nil;
UIViewController *going = nil;
    UIViewAnimationTransition transition;
going = languageMenu;
coming = loadingmenu;
transition = UIViewAnimationTransitionFlipFromLeft;
   [UIView setAnimationTransition: transition forView:self.view cache:YES];

[coming viewWillAppear:YES];
[going viewWillDisappear:YES];

[going.view removeFromSuperview];
[self.view insertSubview: coming.view atIndex:0];
[going viewDidDisappear:YES];
[coming viewDidAppear:YES];

[UIView commitAnimations];
4

3 に答える 3

1

UIToolbarとその戻るボタンをいつ作成するか、そしてそれらを新しいビューにいつ追加するかによって異なります。

また、viewWillAppear行とviewWillDisappear行をアニメーションの一部にする必要がある特別な理由はありますか?それらをアニメーションから引き出し、viewDidDisappearとviewDidAppearをアニメーションの完了時に呼び出されるコールバック関数に移動してみます。UIViewsetAnimationDidStopSelectorのドキュメントを参照してください。

それが役立つかどうかはわかりませんが、役立つ可能性があります。

于 2009-07-20T02:58:55.690 に答える
0

キャッシュされた遷移が機能する方法は、iPhone がウィンドウのスナップショットを取得し、それが画像であるかのようにいくつかの変換を行うことです。キャッシュされていないトランジションは、ライブ ウィンドウが変換されるときに実際に再描画します。

あなたの問題は、スナップショットが撮られたときにビューに戻るボタンが表示されていないようです。解決策は、ナビゲーション ビュー コントローラーなどに依存するのではなく、ボタンを手動で追加することです。

于 2009-07-19T17:42:35.083 に答える
0

2 つのビューの違いに問題がある可能性があります。IB で両方のビューの属性を確認してください。両方のステータスバーを指定しましたか? それともそのうちの1つだけですか?これにより、垂直方向のオフセットに違いが生じ、いくつかの問題が発生する可能性があります。

アニメーション遷移コードの前に 2 つのフレームを等しく設定することで、この小さな問題を解決できる可能性があります。

newViewController.view.frame = self.view.frame;

(これにより、キャッシュに戻すこともできます:YES)

別の問題として、現在のウィンドウの現在のビューではなく、現在のウィンドウにサブビューを追加することを検討したい場合があります。

[[self.view superview] addSubview:newViewController.view];

このようにして、すべてのウィンドウ イベントへの明示的な呼び出しを削除できます。また、トランジションを現在のビューではなくウィンドウにリンクする必要があります。そうしないと、アニメーションが機能しません。

[UIView setAnimationTransition:transition forView:self.view.superview cache:YES];

私は同様の問題に苦しんでいましたが、最終的にはこれが正しくなりました。また、QuartzCore ファンデーション アニメーションを試してみることもできます。

#import <QuartzCore/QuartzCore.h>

// ...

    // get the view that's currently showing
    UIView *currentView = self.view;
    [currentView retain];
    // get the the underlying UIWindow, or the view containing the current view
    UIView *theWindow = [currentView superview];

    UIView *newView = myNewViewController.view;
    newView.frame = currentView.frame;

    // add subview
    [theWindow addSubview:newView];

    // set up an animation for the transition between the views
    CATransition *animation = [CATransition animation];
    [animation setDuration:0.8];
    [animation setType:kCATransitionPush];
    [animation setSubtype:kCATransitionFromRight];
    [animation setTimingFunction:[CAMediaTimingFunction
            functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];

    [[theWindow layer] addAnimation:animation forKey:@"SwitchToView1"];

そして、元に戻るには、同じことを行います(もちろん反対方向を除く)。追加サブビューを次のように置き換えます。

    [self.view removeFromSuperview];

これにより、前のウィンドウが再び前面に表示されますが、そのイベントはトリガーされません (理由はまだわかりません)。

これがあなたのために物事を整理し、他の多くの人々を助けることを願っています.

于 2010-10-15T14:57:10.443 に答える