0

私の目標は、カメラを最初のビューとして表示し、写真を撮った後にナビゲーション コントローラーにある一連のビューに移動するアプリケーションを作成することです。私が作りたいものに最も近い既存のアプリケーションは Snapchat です。

私はこれに数日間苦労してきました。これが私が試したことです(これらのどれも機能していないようです)。

  1. ルート ビュー (ナビゲーション コントローラー内) モーダル UIImagePickerController を提示し、次のビューに移動します。【セグエしない】

  2. 1 と同じですが、モーダル コントローラーを閉じてからセグエします。【ちょっと効く。UIImagePicker をロードするとき、および次のビューに遷移するときに背景を表示します]

  3. UIIMagePickerController のサブクラスをルート ビューとして使用します。[動作しますが、ナビゲーション バーを表示できないか、UIImagePickerController の表示時にクラッシュします][

  4. 3 を使用し、ナビゲーション コントローラー内に埋め込まないでください (理由: UIImagePickerController はナビゲーション コントローラーのサブクラスであるため、これは機能するはずです)。[動作しません。]

私は同じことを行うために他に約 10 の方法を試しましたが、それらは次のカテゴリに分類されます: [Kinda Works. ほとんどの場合、クラッシュするか、見栄えが悪くなります]。

これを行う最善の方法は何ですか?どんな助けやアドバイスも大歓迎です!

繰り返しますが、これが紛らわしい場合は、スナップチャットを開いてフローで遊んでください(同じフロー、実際のアプリのまったく異なるアイデア-つまり、スナップチャットのクローンではありません:)

ありがとう!

4

2 に答える 2

1

アニメーションなしでナビゲーション コントローラーのルート ビュー コントローラーからイメージ ピッカーをモ​​ーダルに表示すると、ピッカーが最初に表示されます。これを閉じると、ピッカーが消えたときに最初に表示したいルート コントローラーが表示されます。それはあなたが望むものですか?このコードはルート コントローラにあります。

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    static int first = 1;
    if (first) {
        UIImagePickerController *picker = [[UIImagePickerController alloc] init];
        picker.sourceType = 0;
        [self presentViewController:picker animated:NO completion:nil];
        first = 0;
    }
}
于 2013-02-08T23:07:10.367 に答える
0

最初の提案:

1 つの mainController を作成し、ボタンを追加します (viewController の数によって異なります)。ボタンをクリックすると、各ボタンが異なる viewController をロードします。

// appDelegate.h

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) MainViewController *mainController;

//appDelegate.m

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

self.mainController = [[[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil] autorelease];
self.window.rootViewController = self.viewController;


//each button clicked has following IBAction:

-(IBAction)button1Clicked:(id)sender

{

        FirstViewController *firstVC = [[FirstViewController alloc]initWithNibName:@"FirstViewController" bundle:[NSBundle mainBundle]];
        UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:firstVC]autorelease];
        [self presentModalViewController:navController animated:NO];
        [addVC release];
}

//in FirstViewController.m

-(void)viewDidLoad 

{

        [super viewDidLoad];

        self.title = @"xxxx ";

        self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel 
                            target:self action:@selector(cancel_Clicked:)]autorelease];

}

-(void) cancel_Clicked:(id)sender {

        [self dismissModalViewControllerAnimated:YES];
}

ノート :

ViewController をナビゲーション コントローラー内に埋め込むには、次のコードを使用する必要があります。

UINavigationController *navController = [[[UINavigationController alloc] initWithRootViewController:firstVC]autorelease];
于 2013-02-08T19:32:44.060 に答える