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,并且必须在拍照后解除锁定