2009-07-19 9 views
1

UIToolBarを持つUIViewには、UiViewからこのビューへの遷移(UIViewAnimationTransitionFlipFromLeft)を開始するときに「戻る」ボタンが付いています。 なぜですか? plsは私IPhone UIToolBar UiBarButtonItem遷移の問題

おかげ

コードヘルプ:キャッシュされた遷移は仕事のやり方がiPhoneである

[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]; 
+0

コードを表示できますか? –

+0

キャッシュを有効にしている場合:NO移行中にボタンが表示されますが、すべてが非常に遅いですか?何か案が ? –

答えて

1

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

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

それが役立つかどうかはわかりませんが、それは可能でしょうか。

+0

ありがとうAmagrammer私はアニメーションブロックのviewWillAppearとviewWillDisappearを移動し、今すぐうまく動作します:) ありがとう! –

+0

あなたは大歓迎です!あなたは私がスタックオーバーフローで本当に助けてくれた最初の人です。 – Amagrammer

0

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

問題は、スナップショットを取ったときに戻るボタンがビューに表示されないことが原因と思われます。解決策は、ナビゲーションビューコントローラなどに頼るのではなく、手動でボタンを追加することです。

0

これは、2つのビューの違いに問題がある可能性があります。 IBの両方のビューの属性を見てください。両方のステータスバーを指定しましたか?またはそれらの1つだけ?これは、垂直オフセットの違いを引き起こす可能性があり、私は思ういくつかの問題を引き起こす可能性があります。 (これはまた、あなたがキャッシュに戻すできるようにする必要があります:YES)

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

あなたはおそらく、アニメーション遷移コードの前に等しいあなたの2つのフレームを設定することで、この小さな問題を解決することができ

オン別の問題は、あなたはこのように、代わりに現在のウィンドウの現在のビューの現在のウィンドウにサブビューを追加することを検討することもできます。

[[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]; 

これにより前のウィンドウが再びフォアグラウンドに来るでしょうが、そのイベントはトリガーされません(私はまだ分かりません)。

これはあなたのために物事を整理し、他の多くの人々に役立つことを願っています。