相机快门出现在自定义UIView前面?

时间:2011-06-29 16:59:39

标签: objective-c ios camera uiimagepickercontroller

我有一个我创建的自定义UIView来显示我的自定义按钮和工具栏。当我第一次要求它显示时,条形图位于快门的顶部(这很好)。但是在相机装入后,快门进入其前面,然后打开。

如果你看一下原生的camera.app,它就不会这样做。工具栏始终保持在那里。这是我的代码:

// .h

UIImagePickerController *theCamera;
@property (nonatomic, retain) UIImagePickerController *theCamera;


// .m

theCamera = [[UIImagePickerController alloc] init];
theCamera.delegate = self;
theCamera.sourceType = UIImagePickerControllerSourceTypeCamera;
theCamera.showsCameraControls = NO;
theCamera.toolbar.alpha = 0;
theCamera.navigationBarHidden = YES;
theCamera.toolbarHidden = YES;
theCamera.wantsFullScreenLayout = YES;
theCamera.cameraViewTransform = CGAffineTransformMakeScale(1.25, 1.25);

UIImageView *tabBarBack = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tab_bar_back.png"]];
tabBarBack.frame = CGRectMake(0, 422, 320, 58);
[customView addSubview:tabBarBack];

theCamera.cameraOverlayView = customView;
[self presentModalViewController:theCamera animated:YES];

显然我在customView添加了更多按钮,但是你得到了这个概念。

3 个答案:

答案 0 :(得分:1)

订阅:

AVCaptureSessionDidStartRunningNotification

这是虹膜打开动画开始的时候。如果在此期间添加cameraOverlayView,它将被虹膜正确遮盖。它与PL ...私人通知同时发布。这是一种记录在案的方法,不会冒被拒绝的风险。

答案 1 :(得分:0)

AFAIK没有直接的方法来做到这一点。如果您使用cameraOverlay,您将获得整个屏幕的快门 然而,有一些替代方法(使用视图层次结构)可以帮助您将预览屏幕作为父视图。 我不确定这种方法是否符合应用商店指南。
请查看Hide/Show iPhone Camera Iris/Shutter animation,以便更好地了解如何实现这一目标。

答案 2 :(得分:0)

在iOS 6+上,如果您已将控制器添加为UIImagePickerController的委托,则此代码应确保快门位于cameraOverlayView后面:

- (void) navigationController:(UINavigationController*) navigationController willShowViewController:(UIViewController*) viewController animated:(BOOL) animated {
    self.imagePickerController.cameraOverlayView = ...; // your camera overlay view
}

我还没有在iOS 6之前的iOS版本上测试过。