2011-10-25 12 views
2

私は5つのuiviewcontrollerで構成されるuitabbarcontrollerを持っています。CATransitionを使用して右から左への遷移と後からの遷移?

最初のuiviewcontrollerのビューでボタンをタップすると、私はuiviewcontrollerを非表示にし、新しいuiviewcontrollerを右から左への遷移で追加します。私はこれを達成しましたが、新しいビューのボタンをタップすると、アプリケーションがクラッシュします。ボタンに付いたコードはありません。 EXEC_BAD_ACCESSエラーが表示されます。

なぜこのようなことが起こっているのか、新しいビューでこの問題を克服する方法を知っている人はいますか?

モーダルビューの切り替えを試すと、ビューが正しく機能します。これは私がCATransitionを使用しようとするときに発生します。モーダルビューのトランジションには、右から左または左から右へのトランジションがないため、CATransitionが必要です。

答えて

5

これは、tabviewcontrollerのUiviewと新しいuiviewの間の移行を行うために必要なコードです。コードは、タブビューコントローラーのいずれかのUIにあるボタンのIBActionに移動します。

//アプリデリゲート

AppDelegate appDelegate =(AppDelegate)[のUIApplication sharedApplication]デリゲート]を初期化します。

//現在

のUIView * currentView = self.viewを示すのビューを取得します。

//基礎となるUIWindow、または現在のビュービュー

のUIView * theWindow = [currentViewのスーパー]を含むビューを取得します。

// remove the current view and replace with mynewView1 
[currentView removeFromSuperview]; 

//新しいビューをviewcontroller1に割り当てます。これは、uitabbarcontrollerの最初の監視コントローラです。私のuitabbarcontrollerは私のプロジェクトに5つのuiviewcontrollerで構成されています。 ボタンは最初のviewcontroller1に存在します。これは私がviewcontroller1に新しいビューを割り当てる理由です。ボタンは私のuitabbarcontrollerのsecondviewcontroller(viewcontroller2)から押された場合、私は(viewcontroller2)secondviewcontrollerに新しいビューを割り当てますというように...

appDelegate.viewController1=[[MyMessages alloc] initWithNibName:@"MyMessages" bundle:nil]; 

//ウィンドウ

[theWindow addSubview:appDelegate.viewController1.view]; 

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

[[theWindow layer] addAnimation:animation forKey:@"SwitchToView1"]; 
に追加します

ありがとうございます!私はこれを達成するために1日以上これを試してきました。私はそれが同じ問題を持つ人を助けることを願っています。

0

おそらく、新しいView Controllerを適切に保持していないと思います。 UINavigatonControllerとpushViewController/popViewControllerを使用しない理由はありますか?それは物事をはるかに簡単にするでしょう

+0

あなたは右だったRadu Lucaciu私は次のことをしなければならなかった: – stefanosn

+0

下の私のasnwerをチェックしてください私はコメントとして投稿できません – stefanosn

0

"新しいビュー"をリリースすることに問題があるかもしれません。これは、コントロールコントローラのビューではなく、ビューコントローラを意味します。

私はあなたが(または単にたとえば)このような何かをしようとしていると思います:

UIViewController *newVC=[[UIViewController alloc] init...]; 
[UIView beginAnimations:@"animId" context:nil]; 
[UIVIew transitionFromView:old.view toView:newVC.view duration:0.3f options:nil completion:nil]; 
[UIView commitAnimations]; 
[newVC release] 

(あなたは(サブビューを挿入するretainCountをインクリメントしない)新しいビューコントローラをリリースするので、あなたがアクションを実行するときタップボタン)、ターゲット(newVC)はすでにリリースされており、これによりこのエラーが発生します。

だから、このビューコントローラへの参照を作成するだけです(たとえば、それをいくつかの保持されたプロパティに割り当てる)。これをモーダルで行うと、モーダルを表示するView Controllerはself.modalViewController内の参照を自動的に保持します。

関連する問題