0

デフォルトのshowsCameraControls = YESでアプリ内にカメラを実装しました。問題は、ユーザーが画像がキーパーであることを確認すると、[self.delegate didFinishWithCamera]でカメラを閉じることです。ユーザーが写真を撮り終わるまで、カメラ ビューにとどまりたいと思います。[self.delegate didFinishWithCamera] がないと、ユーザーが写真を保持することを確認した後にアプリがハングし、ライブ カメラ フィードに戻ることはありません。カメラ ビューに留まるにはどうすればよいですか? あなたの助けに感謝します!

@implementation PHFPhotoOverlayVC

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.imagePickerController = [[UIImagePickerController alloc] init];
        self.imagePickerController.delegate = self;
    }
    return self;
}

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

    if (sourceType == UIImagePickerControllerSourceTypeCamera)
    {
        self.imagePickerController.mediaTypes =
            [NSArray arrayWithObjects:(NSString *) kUTTypeImage, nil];
        self.imagePickerController.showsCameraControls = YES;

#if false
        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];
        }
#endif
    }
}


#pragma mark -
#pragma mark UIImagePickerControllerDelegate

- (void)    imagePickerController:(UIImagePickerController *)picker
    didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    self.imagePickerController.mediaTypes =
        [NSArray arrayWithObjects:(NSString *) kUTTypeImage, nil];
    self.imagePickerController.showsCameraControls = YES;


    UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage];
    if (self.delegate)
        [self.delegate didTakePicture:image];

    [self.delegate didFinishWithCamera];
}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
    [self.delegate didFinishWithCamera];
}

@end
4

2 に答える 2

0

これを実現するには、写真を撮るための独自の方法を実装する必要があります。これは、このデフォルトのボタンによってビューが閉じられるためです。

明らかに、showsCameraControls=NO を設定することでこれを行うことができますが、それでも必要な他のすべての機能を再作成する必要があります。

私はこれを行ったことはありませんが、showsCameraControls=YES のままにし、cameraOverlayView を使用して、既存のボタンの上に同一の「写真を撮る」ボタンを単純に重ねることができるはずです。その場合、そのボタンに UIImagePickerViewController のインスタンスからメソッド -takePicture を呼び出すだけで済みます。

うまくいけば、それで十分です。お気軽にコメントして、説明を求めてください。

于 2013-05-10T16:26:48.963 に答える
0

カスタム カメラを実装する必要があります。Apple の SquareCam の例を確認してください。

AVFoundation を使用し、写真が撮影されたときにあらゆる種類のカスタム動作を実装できます (そのカメラ ページにとどまるなど) - 自分でフォト ライブラリに保存する必要さえあります (SquareCam の例は、あなたはこれを行う方法)。これはまた、トリミング/サイズ変更コントロールが必要な場合は自分で作成する必要があることを意味し、ユーザーが写真を撮った後に写真を確認できるようにする場合は、ピッカー ビュー (グリッド ギャラリー ビュー) を作成する必要があります。

それはおそらく中級レベルのものです - 実装するのに数日かかりましたが、あなたのアプリが何らかの形で写真に焦点を当てているなら、これは間違いなく進むべき道です. カメラの UI と動作を完全に制御できます。

ああ、ええ、フラッシュ ボタン、シャッター ボタン、シャッター効果、タップしてフォーカスなどを自分で実装する必要があります。AVFoundation は基本的に、カメラ レンズへの直管を提供します (比喩的に)。

于 2013-05-10T16:36:13.590 に答える