1

私は、iOS 向けのプログラミングを学び始めてから (2012 年 2 月)、この質問について調べてきました。ここで同じ質問をしているように見える多くの投稿を読みましたが、回答をアプリケーションに実装しようとしましたが、役に立ちませんでした。私は単純なものが欠けていると確信しています。

ビュー切り替えテスト アプリケーションがあります。オレンジ、ブルー、イエローの 3 つのビューがあります。最初はオレンジ色のビューに 2 つのボタンがあります。青色のビューに切り替え、黄色のビューに切り替えます。黄色のビューに切り替えるをクリックすると、ビューは白い背景に対して回転します。黄色のビューには、オレンジ色のビューに切り替えるボタンと青色のビューに切り替えるボタンの 2 つのボタンもあります。オレンジ色のビューに切り替えるをクリックすると、ビューが反転しますが、白い背景の代わりにオレンジ色のビューが背景になります。オレンジ色のビューが表示されないようにするにはどうすればよいですか?

これは、移行を行うために使用するコードです。

-(IBAction)switchToYellowView:(id)sender {

YellowViewController *myViewController = [[YellowViewController alloc]
                                         initWithNibName:@"YellowViewController"
                                         bundle:nil];

[UIView beginAnimations:@"flipview" context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft 
                       forView:self.view cache:YES];

[self.view addSubview:myViewController.view];

[UIView commitAnimations];

}

私が読んだことから、スーパービューからオレンジ色のビューを削除する必要があると思いました。しかし、私が使用するとき

[OrangeViewController.view removeFromSuperView]

「オブジェクト OrangeViewController にプロパティ ビューが見つかりません」というエラーが表示されます。

黄色のビューから青色のビューに切り替えると、オレンジ色のビューがまだ背景にあります。そして、青からオレンジに戻りますが、黄色はまだ背景にあります.

追加してこれらのビューも解放する必要があることを他の場所で読みました

[myViewController release]

アニメーションをコミットした後。これは、ARC(私が使用している)を使用する場合は不要だと思いました。これを行うと、オレンジ色のビューに戻ろうとすると、Bad Access クラッシュが発生します。

おそらく、rootViewController で何かをする必要がありますか? アプリの delegate.m で、OrangeView を「window」のサブビューとして設定しました。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

// Override point for customization after application launch.

// Add the view controller's view to the window and display.
[self.window addSubview:viewController2.view];
[self.window makeKeyAndVisible];

return YES;

}

viewController2 は、OrangeViewController へのポインターです。

最初のコメントのおかげで、rootViewController を切り替える方法を探し始めました。そして、rootviewcontroller をプログラムで切り替えることに関する Ken Anderson の講義ノートを見つけました。黄色を変更することはできますが、アニメーション化されていません。

次の 2 つのコメントは、私を別の方向に導きます。UITabBarController のようなコンテナー コントローラーを使用するのが最善でしょうか? 自分のボタンを使用し、タブバーを表示しないことを除いて?

もちろん、閲覧用にアプリケーション全体を提供することもできます。前もって感謝します!

4

2 に答える 2

1

使用してみてください:

[self transitionFromViewController:currentViewController toViewController:firstViewNav duration: options: animations:^{
        } completion:^(BOOL finished){

        }];
于 2012-04-22T05:02:47.133 に答える
0

switchToYellowView: 内で、黄色のビューを現在のビュー (オレンジ色のビュー) のサブビューとして追加しています。したがって、[OrangeViewController.view removeFromSuperView] でオレンジ色のビューを削除しようとすると (ビューは OrangeViewController のパブリック プロパティではないため、おそらく機能しません)、黄色のビューを持つオレンジ色のビューを削除することになります。サブビュー、ウィンドウから両方を効果的に削除します。switchToYellowView 内でやりたいことは次のようなものだと思います:

[self.view removeFromSuperview]; //remove the orange view
[window addSubview:myViewController.view]; //replace it with the yellow view
于 2012-04-21T22:01:52.593 に答える