0

私は、ユーザーが仮想ツアーを進められるようにするiPadアプリケーションをまとめています。彼らは、ビデオや詳細情報などの他の資料へのボタンが付いている画面を前に進むことができます。

Keynoteがハイパーリンクをサポートしている場合はそれが適していますが、そうではないため、Xcode内でツアーを再現しようとしています。

私は初心者ですが、調査に時間を費やし、「スライド」を表示するコードと、スライドを前後に移動する機能を持っています。スライドは、フルスクリーンのグラフィックとさまざまなオプションのボタンを備えた画像ビューにすぎません。一部のスライドはシンプルで前後にしかありませんが、他のスライドには追加のリンクがあります

ただし、この単純な方法で実行すると、膨大な数のView ControllerとXIBファイルが作成され、現在75であり、どのアプリよりも多いはずです。ただし、シミュレーターではなくデバイスで実行すると爆破する場合がありますが、機能します。

私の質問は、1つのアプリ内のView Controllerの数に制限があり、その数が多いと不安定になるのでしょうか?ビューを配列に配置したり、単一のView Controllerからプッシュしたりするなど、ビューを処理する他の方法を知っていますが、これでは、さまざまなコンテンツに合わせてスライドを調整する柔軟性が得られません。

私はどんな助けやアドバイスも歓迎します、そして私はこの質問を正しい方法で投稿することについて行ったことを望みます(それは私の最初です)

どうもありがとうキエロン

ビューを操作するために使用しているコードは

-(IBAction)goBack {
    [self dismissModalViewControllerAnimated:NO];
}

-(IBAction)goForward {  
    Slide5ViewController *screen = [[Slide5ViewController alloc] initWithNibName:nil bundle:nil];
    screen.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:screen animated:YES];
    [screen release];
}   
4

2 に答える 2

4

キエロン、

1つの「スライド」ビューコントローラーと別の画像だけを持ってみませんか?ある種のデータ構造を使用して、各スライドのボタン、画像、および経路に関する情報を保持し、次に各スライドに同じビューコントローラーを再利用し続けますか?

ビューコントローラは、現在表示されているビューとそれ自体の次のインスタンス化の間で遷移するときに、各画像を動的にロードできます...1つのビューコントローラのみを使用して可能にする必要があります。

Interface Builderの使用に慣れている場合は、XIBファイルを引き続き使用してすべてをレイアウトしてください。ただし、各「ファイルの所有者」を異なるView Controllerに設定するのではなく、すべて同じものに設定してください。次に、IBActionメソッド内で(ユーザーがボタンを押したとき)、ロジックを使用して、「現在このビューを表示していて、ユーザーがこのボタンを押したので、次にどちらに移動する必要がありますか?」と言います。

次に、次のようなメソッドを呼び出しますloadNewSlide:

- (void) loadNewSlide:(NSInteger)slideNumber
{
  // Make a string with the new XIB name
  NSString* xibName = [NSString stringWithFormat:@"slide-%d",slideNumber];

  // Create the next slide view controller (it doesn't matter if you create a slide view 
  // controller from within another slide view controller, remember, they are all just  
  // objects)
  SlideViewController *newSlideViewController = [[SlideViewController alloc] initWithNibName:xibName bundle:nil];

  // Change the view
  UIWindow *theWindow = [self.view superview];
  [self.view removeFromSuperview];
  [theWindow addSubview:newSlideViewController.view];

  // Release, the view stack now should be retaining the view controller instead
  [newSlideViewController release];
}

これは、75のビューコントローラーで「モーダル」に実行するよりもはるかにうまく機能します(以前に提案したように)。これは、一度に1つのスライドのみをメモリに保持し、現在見ているものは何でも、次のスライドをロードするためです。それに移動する時間。

于 2010-11-07T12:43:44.183 に答える
0

まず第一に、ログにはどのようなエラーがありますか?

ビューコントローラのviewDidUnloadメソッドを適切に実装しましたか?ビューコントローラは、ロードされたxibをアンロードできる必要があります。また、didReceiveMemoryWarningでデータを解放します。

次に、モーダルビューコントローラースタックではなく、UINavigationControllerを使用してビューコントローラースタックを処理する方がよい場合があります。ナビゲーションバーを非表示にしたり、カスタマイズしたりできます。

于 2010-11-07T12:53:34.497 に答える