rootviewcontrollerdelegate の定義は次のとおりです。
@プロトコル RootViewControllerViewDelegate
-(void)toggleView:(UIViewController )newController viewController:(UIViewController )oldController;
@終わり
toggleView の可能な実装
-(void)toggleView:(UIViewController *)newController viewController:(UIViewController*)oldController {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1];
[UIView setAnimationTransition:([oldController.view superview] ? UIViewAnimationTransitionFlipFromLeft : UIViewAnimationTransitionFlipFromLeft) forView:self.view cache:YES];
[newController viewWillAppear:YES];
[oldController viewWillDisappear:YES];
[oldController.view removeFromSuperview];
[self.view addSubview:newController.view];
[oldController viewDidDisappear:YES];
[newController viewDidAppear:YES];
[UIView commitAnimations];
[oldController release];
}
これにより、ビューを反転してView Controllerをスワイプします
明らかに、どこかに新しい RootViewController を作成し、そこにあるビューから開始する必要があります (アプリのデリゲートである可能性があります)。
ViewController が RootViewController を使用できるようにする場合は、プロトコルに準拠する必要があります。そのクラス インターフェイスで次のように宣言します。
@interface MyViewController : UIViewController <RootViewControllerDelegate> {
id delegate;
}@property(assign) id <RootViewControllerViewDelegate> delegate;
すべてが正しく初期化されていれば、デリゲート メソッドを使用してビューを別のビューに交換できます。2 つのコントローラー ビューを交換するコードは次のようになります。
NewViewController *viewController=...
//you can set up your viewControllers data here if you need to
//Since its probable that this view has that data it can just set it instead of
//delegating
viewController.delegate=delegate; //setting up the RootViewController reference
[delegate toggleView:viewController viewController:self];
そのコントローラーへのすべての参照を失うため、リークが発生することはありません。