我想在用户拍摄照片或选择保存的照片后添加确认视图。确认视图将只显示所选的图像,工具栏中有一个取消和上传按钮。
我的UIImagePickerController是从我的一个视图控制器以模态方式呈现的,该视图控制器由导航控制器控制,导航控制器又由选项卡栏控制器控制。
如何以模态方式显示确认视图,以便在用户选择照片时占据整个屏幕(就像图像选择器视图一样)?理想情况下,我想要这样的东西:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[picker dismissModalViewControllerAnimated:YES];
UIViewController *modal = [[UIViewController alloc] init];
modal.view = confirmationView;
[self presentModalViewController:modal animated:YES];
[modal release];
}然而,这会使应用程序崩溃。我是否应该从选取器中以模态方式显示确认视图?如果是这样,我如何确保当确认视图关闭时,选择器也不会显示?
编辑:
修复了我发布的代码中的错误。这就是当我尝试从内存而不是copy+paste输入时发生的事情:(不管怎样,到目前为止的建议都没有帮助。
如果我呈现模态控制器,然后取消选择器,什么也不会发生,大概是因为两个控制器随后都被取消了。
如果我取消了选择器,然后呈现模态控制器,我会得到一个关于模态转换的异常:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempting to begin a modal transition from <UINavigationController: 0x6b33940> to <UIViewController: 0x6b62b00> while a transition is already in progress. Wait for viewDidAppear/viewDidDisappear to know the current transition has completed'发布于 2010-09-27 14:42:02
找到了解决方案。实际上,需要取消拾取器,诀窍是关闭该取消的动画,以便它立即发生,然后呈现第二个模式视图。
编辑:实际上,它几乎让我得到了我想要的东西。当您关闭选取器时,原始视图会在瞬间显示,然后模式视图会显示动画。这看起来有点时髦。
我也试着把选择器留在身边,而不是把它打发掉。相反,我调用了[picker presentModalViewController:modal animated:YES]。这让我可以顺利地从选择器转换到确认视图。但是,当我完成确认视图时,我需要从原始控制器调用[self dismissModalViewControllerAnimated:YES]。这样做的效果是,在清除所有内容之前,首先显示图像拾取器。再说一次,这并不是我想要的。
理想情况下,我想要的效果与Facebook iPhone应用程序上传照片时使用的效果相同。一旦你选择了一张照片,它就会无缝地转换到确认视图。从该视图中取消或确认将平滑地过渡回原始的主视图。它使确认视图看起来像是图像选择器的一部分,而实际上它可能只是另一个自定义视图。
我该怎么做??
发布于 2011-08-14 09:34:18
试试这个。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIViewController *modal = [[UIViewController alloc] init];
modal.view = confirmationView;
picker.navigationController pushViewController:modal animated:YES];
[modal release];
}发布于 2010-09-27 05:59:22
你在展示它之前发布了modal。试试这个:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIViewController *modal = [[UIViewController alloc] init];
modal.view = confirmationView;
[self presentModalViewController:modal animated:YES];
[modal release];
[picker dismissModalViewControllerAnimated:YES];
}https://stackoverflow.com/questions/3799879
复制相似问题