【问题标题】:UIImagePickerController's shutterUIImagePickerController 快门
【发布时间】:2012-01-25 06:13:55
【问题描述】:

我有 UIImagePickerController 的错误,它的源类型是相机。有时控制器出现后,快门没有打开,我看不到相机视频信号,但拍摄的照片是正确的。

我可能做错了什么?代码:

    if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera]){

            UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init];
            cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera;
            cameraUI.allowsEditing = NO;
            cameraUI.showsCameraControls = NO;
            cameraUI.delegate = self;

            NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"OverlayView" owner:self options:nil];
            UIView *controlsView = [nibObjects objectAtIndex:0];

            CGRect overlayViewFrame = cameraUI.cameraOverlayView.frame;
            CGRect controlsFrame = CGRectMake(0.0, CGRectGetHeight(overlayViewFrame) - 54.0,
                                         CGRectGetWidth(overlayViewFrame), 54.0);

            controlsView.frame = controlsFrame;
            [cameraUI.cameraOverlayView addSubview:controlsView];

            [self presentModalViewController: cameraUI animated: YES];            
    }

【问题讨论】:

  • 在显示选择器时,您是否正在做一些处理器密集型的事情?
  • 不,我不知道。快门只是在不定式时间挂断,但所有控件都正常响应
  • 澄清一下!最近我注意到,从任务栏转到应用程序后会重现什么错误:第一步-将应用程序转到任务栏第二步-从任务栏打开应用程序第三步-进行相机初始化
  • 我修复了这个错误。我忘了在最后发布一个cameraUI

标签: objective-c ios uiimagepickercontroller


【解决方案1】:

锁定/解锁应用程序后,我也遇到了同样的情况,看起来快门在 viewDidAppear 上打开了。

所以,我将我的父视图控制器订阅到 UIApplicationDidBecomeActiveNotification 并手动重新执行包含 UIImagePickerController 的控制器的 viewWillAppear 和 viewDidAppear 方法

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(applicationBecomeActive)
                                             name:UIApplicationDidBecomeActiveNotification
                                           object:nil];

.
. 
.

- (void)applicationBecomeActive {
    if (imagePicker_)
        [imagePicker_ openShutter];
}

然后在包含 UIImagePickerController 的控制器上

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [imagePickerController_ viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [imagePickerController_ viewDidAppear:animated];
    imagePickerController_.cameraFlashMode = cameraFlashMode_;
    imagePickerController_.cameraDevice = cameraDevice_;
}
- (void)openShutter {
    [imagePickerController_ viewWillAppear:YES];
    [imagePickerController_ viewDidAppear:YES];
}

PS:如果你试试这个,别忘了移除观察者

[[NSNotificationCenter defaultCenter] removeObserver:self];

希望对你有帮助

【讨论】:

    【解决方案2】:

    如果您不是以模态方式呈现UIImagePickerController(推荐方式),那么您可以手动调用 viewDidAppear 和 willAppear,或者将 UIImagePickerController 添加为您正在呈现的子视图控制器。

    [thePresentingViewCotnroller addChildViewController:imagePickerController];
    

    之后,您可以将 imagePickerController 中的视图添加为子视图,这将自动调用视图生命周期方法 (viewWillAppear, didAppear and disappear)。

    【讨论】:

      【解决方案3】:

      尝试在初始化UIImagePickerController时添加自动释放:

      UIImagePickerController *pickerController = [[[UIImagePickerController alloc] init] autorelease];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多