3

私はObjective Cを初めて使用し、ここに投稿するのは初めての質問なので、これはおそらく世界で最も簡単に答えられる質問ですが、私はこれを理解できませんでした.

カメラを使用する iOS アプリを作成しようとしています。カメラを表示して写真を撮るために UIImagePickerController クラスを使用していますが、cameraOverlayView プロパティを使用して、カメラ プレビュー フレームをオーバーレイする一連の UIButton インスタンスを含むカスタム UIView を作成しました。次のコードを使用して、 a メソッドを使用してカメラを画面に表示しています。

- (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 のボタンをタップしたときにカメラがフォーカスされないようにするにはどうすればよいですか?

助けてくれてありがとう!

4

1 に答える 1

0

これをコードに追加します: hitTest:withEvent:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    UIView *hittedView = [super hitTest:point withEvent:event];
    return hittedView == self.button ? hittedView : nil;
}

私はこれを参照しました: UserInteraction enable for subview only。コードをテストしました。そしてそれはうまくいきます!

于 2012-11-14T10:37:05.203 に答える