【问题标题】:How to launch iPhone Camera on viewDidLoad?如何在 viewDidLoad 上启动 iPhone 相机?
【发布时间】:2010-11-24 06:09:38
【问题描述】:

加载视图时,我似乎无法启动相机。我最终让用户必须在屏幕上找到并按下一个按钮才能加载相机(冗余)。我怎样才能做到这一点?代码如下:

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {

    self.imgPicker = [[UIImagePickerController alloc] init];
    self.imgPicker.allowsImageEditing = NO;
    self.imgPicker.delegate = self;
    self.imgPicker.sourceType = UIImagePickerControllerSourceTypeCamera;

    [super viewDidLoad];

    [self presentModalViewController:self.imgPicker animated:YES];

}

更新:
将上述代码放入 -viewDidAppear:(BOOL)animated 允许启动相机,但应用程序随后立即崩溃,最后一个例程为 [UIWindowController transitionViewDidComplete:fromView:toView]; (由 Debugger 引用)

【问题讨论】:

    标签: iphone uikit uiviewcontroller camera


    【解决方案1】:

    如果第一个不起作用,您应该在 viewWillAppear: 或 viewDidAppear: 中执行此操作。尝试在 viewDidLoad 中执行它是行不通的,因为它是在首次创建视图后调用的,并且该视图在那时不是其他任何东西的子视图。据我了解,为了在 self 上调用 presentModalViewController,视图必须在某种程度上显示在 UIWindow 中。

    我刚刚注意到的另一件事;根据您声明 imgPicker 属性的方式,您的代码会泄漏内存。如果它是用retain而不是assign声明的,那么除非你在某个地方明确释放它两次,否则选择器将始终存在于内存中。在这种情况下,您应该在将初始化对象分配给属性时自动释放它。

    【讨论】:

    • 更新:- (void)viewDidAppear:(BOOL)animated 在这种情况下有效。谢谢!
    • UPDATE-2:相机正在显示,但我的应用退出:“错误 EXC_BAD_ACCESS”
    • 什么时候退出?当相机出现或关闭它时,或之后的某个时间?
    • 应用程序在相机出现后立即崩溃。最后执行的例程是:[UIWindowController transitionViewDidComplete:fromView:toView]; (由调试器引用)
    • 在展示之前,您是否在其他任何地方发布了图像选择器?这就是我能想到的;每当您尝试引用已释放到足以将其释放的内容时,就会出现 EXC_BAD_ACCESS 错误。如果没有看到代码本身,我真的无法提供更多帮助。
    【解决方案2】:

    似乎当您在 view did load 中调用 present modal view 时它不会这样做。您可以尝试在调用 [super viewDidload] 后设置一个 2 秒计时器,以将选择器视图推入或类似的东西。

    【讨论】:

    • 定时器不能解决问题;从第一次在控制器中创建视图到即将显示视图之间的时间可能超过两秒,在这种情况下调用仍然无法正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 2012-09-05
    • 2013-08-08
    相关资源
    最近更新 更多