Objective c 导航后,摄影机覆盖将保持关闭状态

Objective c 导航后,摄影机覆盖将保持关闭状态,objective-c,ios,Objective C,Ios,我正在使用一个有三个屏幕的应用程序 首先是主屏幕。从带有按钮的主屏幕,用户导航到第二个屏幕,在那里我有一个摄像头覆盖,只有一个按钮可以拍照 当用户拍照时,他可以按下一个按钮导航到最后一个屏幕。但当他从最后一个屏幕导航到主屏幕,然后进入第二个屏幕时,相机关闭。按钮显示他可以拍照,但他无法透过相机看到 我在主屏幕上使用以下代码启动覆盖: if (self.imageView.isAnimating) self.imageView.stopAnimating; if ([UIImagePic

我正在使用一个有三个屏幕的应用程序

首先是主屏幕。从带有按钮的主屏幕,用户导航到第二个屏幕,在那里我有一个摄像头覆盖,只有一个按钮可以拍照

当用户拍照时,他可以按下一个按钮导航到最后一个屏幕。但当他从最后一个屏幕导航到主屏幕,然后进入第二个屏幕时,相机关闭。按钮显示他可以拍照,但他无法透过相机看到

我在主屏幕上使用以下代码启动覆盖:

if (self.imageView.isAnimating)
    self.imageView.stopAnimating;

if ([UIImagePickerController isSourceTypeAvailable:sourceType])
{
    [self.overlayViewController setupImagePicker:sourceType];
    [self presentModalViewController:self.overlayViewController.imagePickerController animated:YES];
}
其中,
overlayviewcontroller
是第二个屏幕,在
overlayviewcontroller
上显示以下代码:

- (void)setupImagePicker:(UIImagePickerControllerSourceType)sourceType
{
    self.imagePickerController.sourceType = sourceType;

    if (sourceType == UIImagePickerControllerSourceTypeCamera)
    {
        self.imagePickerController.showsCameraControls = NO;

        if ([[self.imagePickerController.cameraOverlayView subviews] count] == 0)
        {
            CGRect overlayViewFrame = self.imagePickerController.cameraOverlayView.frame;
            CGRect newFrame = CGRectMake(0.0,
                                         CGRectGetHeight(overlayViewFrame) - self.view.frame.size.height - 10.0,
                                         CGRectGetWidth(overlayViewFrame),
                                         self.view.frame.size.height + 10.0);
            self.view.frame = newFrame;
            [self.imagePickerController.cameraOverlayView addSubview:self.view];
        }
    }
}

如果有任何帮助,我将不胜感激。

我也面临同样的问题,我得到了一个解决方案

我的解决方案如下

[self performSelector:@selector(setCameraOverlayView) withObject:Nil afterDelay:2];
而不是直接把下面的线

[self.imagePickerController.cameraOverlayView addSubview:self.view];
覆盖视图控制器的上述方法中

并将该行放入选择器方法
setCameraOverlayView

就像下面

-(void)setCameraOverlayView
{
    [imagePickerController.cameraOverlayView addSubview:self.view];
}
这会解决你的问题

快乐编码:)

编辑

为了初始化覆盖,我使用下面的代码,覆盖中的init函数也被修改

初始化覆盖

self.overlayViewController = [[OverlayViewController alloc] initWithNibName:@"OverlayViewController" bundle:nil images:self.finalData];
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil images:(NSArray *)imgArray
{
    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]))
    {
        subCategories = imgArray;
        imagePickerController = [[UIImagePickerController alloc] init];
        imagePickerController.delegate = self;
        imagePickerController.navigationBarHidden = YES;
    }
    return self;
}
覆盖中的init函数

self.overlayViewController = [[OverlayViewController alloc] initWithNibName:@"OverlayViewController" bundle:nil images:self.finalData];
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil images:(NSArray *)imgArray
{
    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]))
    {
        subCategories = imgArray;
        imagePickerController = [[UIImagePickerController alloc] init];
        imagePickerController.delegate = self;
        imagePickerController.navigationBarHidden = YES;
    }
    return self;
}
该数组不是必需的,它是一些额外的信息,我需要做一些更多的覆盖你可以忽略它


快乐编码:)

您好,非常感谢您的建议。但问题是这段代码并没有解决这个问题。覆盖层底部有摄像头和拍照按钮。其结果是,“拍照”按钮显示延迟2秒,但导航后摄像头仍关闭。用户可以拍照,但无法通过摄像头看到他正在拍摄的照片。我想知道你能否提出一个解决这个问题的办法?提前谢谢你。好的。以前解决过的问题也可以给你解决。但需要一些时间我认为您需要在拍摄图像后解除锁定imagePicker控制器,并在导航到imagePicker页面时再次分配用于拍摄图像。这似乎是与记忆有关的问题。需要释放一些资源,当您需要拍照时,必须在下线前分配imagePickerController,并且必须在拍照后解除锁定