UIImagePickerController与cameraOverlayView,当覆盖层中的按钮被点击时会自动对焦。

3
我刚学习Objective C,这是我在这里发布的第一个问题,所以这可能是世界上最容易回答的问题,但我解决不了这个问题。
我正在尝试创建一个使用相机的iOS应用程序。我使用UIImagePickerController类来显示相机并拍照,但我创建了一个自定义UIView,其中包含一堆UIButton实例,它们覆盖相机预览框架,使用cameraOverlayView属性。我使用一个方法来使用以下代码将相机放在屏幕上:
- (BOOL) startCameraControllerFromViewController: (UIImagePickerController*) imagePickerController
                               usingDelegate: (id <UIImagePickerControllerDelegate,
                                               UINavigationControllerDelegate>) imagePickerControllerDelegate {

if (([UIImagePickerController isSourceTypeAvailable:
      UIImagePickerControllerSourceTypeCamera] == NO)
    || (imagePickerController == nil)
    || (imagePickerControllerDelegate == nil))
    return NO;

imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;

imagePickerController.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeImage, nil];

imagePickerController.allowsEditing = NO;
imagePickerController.showsCameraControls = NO;
imagePickerController.wantsFullScreenLayout = YES;

imagePickerController.delegate = imagePickerControllerDelegate;

self.cameraOverlayViewController = [[CameraOverlayViewController alloc] initWithImagePickerControllerDelegate:imagePickerController nibName:@"CameraOverlayView" bundle:nil];
self.cameraOverlayViewController.view.frame = CGRectMake(0, 0, imagePickerController.view.frame.size.width, imagePickerController.view.frame.size.height);
imagePickerController.cameraOverlayView = self.cameraOverlayViewController.view;

[self presentViewController:imagePickerController animated:self.showCameraAnimation completion:^(void) {
    [self.view bringSubviewToFront:self.cameraOverlayViewController.view];
}];

return YES;

当我按下位于相机预览窗口顶部的按钮时,相应的IBAction被触发,但底层相机视图也被点击并重新聚焦。因此,每次我按下一个按钮之前都必须手动重新对焦相机预览才能拍照。如您所见,我尝试使用bringSubViewToFront:,但似乎不起作用。
如何防止在cameraOverlayView上点击按钮时相机聚焦?
感谢您的帮助!

这段代码会起作用吗?[imagePickerController.view bringSubviewToFront:self.cameraOverlayViewController.view]; - jithinroy
1个回答

0
将以下代码添加到您的程序中:hitTest:withEvent:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    UIView *hittedView = [super hitTest:point withEvent:event];
    return hittedView == self.button ? hittedView : nil;
}

我参考了这个链接:仅为子视图启用用户交互。我测试了代码,它可以正常工作!

嗯,[imagePickerController.view setUserInteractionEnabled:NO] 似乎没有起作用。我仍然可以点击以对焦。 - Nelis86
我发现了这个主题:http://iphonedevsdk.com/forum/iphone-sdk-development/76953-tap-to-focus-in-uiimagepickercontroller.html它基本上说你必须将覆盖视图添加为UIImagePickerController视图的子视图。问题是这会禁用点按以聚焦功能。我需要点按以聚焦,所以这对我来说不是正确的解决方案,但也许其他人会发现这有用。 - Nelis86

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接