0

我的目标是创建一个应用程序,它将相机作为出现的第一个视图,然后在拍照后转到导航控制器中的一系列视图。与我想做的最接近的现有应用程序是 Snapchat。

我已经为此苦苦挣扎了好几天,这就是我尝试过的(这些似乎都不起作用)。

  1. 根视图(导航控制器内部)呈现一个模态 UIImagePickerController,然后转到下一个视图。[不继续]

  2. 与 1 相同,但关闭模态控制器然后继续。[有点工作。在加载 UIImagePicker 以及转换到下一个视图时显示背景]

  3. 使用 UIIMagePickerController 的子类作为根视图。[有效但不允许显示导航栏,否则在显示 UIImagePickerController 时崩溃][

  4. 使用 3 并且不要嵌入到导航控制器中(推理:因为 UIImagePickerController 是导航控制器的子类,这应该可以工作)。[不起作用。]

我已经尝试了大约 10 种其他方法来做同样的事情,它们属于这一类:[有点工作。大多数崩溃或看起来很难看]。

做这个的最好方式是什么?任何帮助或建议将不胜感激!

同样,如果这令人困惑,只需打开 snapchat 并使用流程(相同的流程,实际应用程序的完全不同的想法 - 即。不是 snapchat 克隆 :)

谢谢!

4

2 回答 2

1

如果您从导航控制器的根视图控制器模态显示图像选择器,没有动画,那么您将首先看到选择器。When you dismiss it, you'll see that root controller, which should be what ever you want to see first when the picker goes away. 那是你要的吗?此代码将在根控制器中:

-(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

第一个建议:

制作一个主控制器并添加按钮(取决于您拥有多少个视图控制器),当单击按钮时,每个按钮将加载不同的视图控制器。

// 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 回答