1

ビューをロードするときに必要な UIViewController があります-カメラの UIImagePickerController を開きます。

A. 私は次のように書きました: EDITED - 私は現在 viewDidAppear を使用しています

- (void)viewDidAppear:(BOOL)animated{
    imagePicker = [[UIImagePickerController alloc] init];
    if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
        [imagePicker setSourceType:UIImagePickerControllerSourceTypeCamera];
    }
    else{
        [imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    }
    [imagePicker setDelegate:self];
    [self presentModalViewController:imagePicker animated:YES];
}

問題は、ユーザーがスナップショットを撮ったり、フォルダーから画像を選択したりした後、UIImagePicker を再度ロードし続けることです。どうすれば一度だけ呼び出すことができますか?

B. カメラを四角形 (UIImage または UIView の可能性があります) 内に表示し、フル スクリーンではなく、上部のナビゲーション バーから離れることができるようにしたいと考えています。

上記を達成するにはどうすればよいですか?

4

3 に答える 3

1

ケース A の場合、アニメーションの衝突 (および wait_fences エラー) を回避するviewDidAppear代わりに、これを入れたほうがよいでしょう。viewWillAppear

ケース B の場合、キャプチャ セッションが必要かUIImagePickerController、変換を使用して調整する必要があります。UIImagePickerController次のプロパティのおかげでそれを行うことができます。

  • cameraViewTransformCGAffineTransformカメラ/ビデオを表示するビューに適用されるを変更します。したがって、たとえば、それを縮小することができます
  • showsCameraControls代わりにNO独自のコントロールを追加する予定がある場合は、デフォルトの iOS コントロールを非表示にするように設定できますUIButtons
  • cameraOverlayViewUIViewこれにより、カメラビューの任意の上に置くことができます。通常、 を持つビューを使用し、backgroundColor = [UIColor clearColor]いくつかのサブビューを追加します。特に、必要に応じて装飾的なものUIImageView(フレームなど)を追加しUIButtonたり、カメラをトリガーするためにいくつかの を使用したり (必要に応じて対応するtakePicturestartVideoCaptureおよびstopVideoCaptureメソッドを使用したり)、 を置き換えます。前のプロパティで非表示にした組み込みカメラ コントロールなどUIImagePickerControllerIBAction

あなたの場合、通常のカメラのボタンを保持したいが、フレームを変更して全画面表示にしたくない場合cameraTransformは、通常、プロパティが必要です。周囲に装飾フレームを追加するには、UIImageViewforcameraOverlayViewプロパティを使用し、それを使用して装飾フレームの画像を表示します (もちろん、カメラ ビューが透けて見えるように中央が透明な画像)。


[編集] (ドキュメンテーションによると) このcameraTransformプロパティは、ムービーをキャプチャする場合 ( の場合sourceType == UIImagePickerControllerSourceTypeCamera) にのみ使用できることに注意してください。したがって、ユーザーがカメラから写真を撮れるようにするために使用できますUIImagePickerControllerが、ライブラリから写真を選択するために使用したい場合は、使用できませんcameraTransform(表示するのが奇妙に見えるため、これは非常に論理的です)。画面上で)。そのため、必ずその場合にのみ使用してください。特に、UIImagePickerControllerSourceTypeCameraソース タイプがデバイスで利用できない場合は使用しないでください。

于 2012-09-05T17:12:55.820 に答える
1

アクションを viewDidLoad メソッドに実装するだけです。これは私がやったことであり、今では完全に正常に動作します。

于 2013-06-27T16:16:34.973 に答える
0
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self getMediaFromSource:UIImagePickerControllerSourceTypeCamera];

}
- (IBAction)TakePhoto:(id)sender {
    [self getMediaFromSource:UIImagePickerControllerSourceTypeCamera];
}

- (void)getMediaFromSource:(UIImagePickerControllerSourceType)sourceType{
    UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
    picker.delegate         = self; 
    picker.allowsEditing        = NO; 
    picker.sourceType           = sourceType; 
    [self presentModalViewController:picker animated:YES];

    [picker release];
}

#pragma mark - UIImagePickerController delegate methods
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    [picker dismissModalViewControllerAnimated:YES];
    [self.tabBarController setSelectedIndex:1];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { 

    [picker dismissModalViewControllerAnimated:YES];
    [self.tabBarController setSelectedIndex:1];
}

パート B を更新。cameraOverlayView のコード例

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

if (sourceType == UIImagePickerControllerSourceTypeCamera)
{
    // user wants to use the camera interface
    //
    self.imagePickerController.showsCameraControls = NO;

    if ([[self.imagePickerController.cameraOverlayView subviews] count] == 0)
    {
        // setup our custom overlay view for the camera
        //
        // ensure that our custom view's frame fits within the parent frame
        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];
    }
 }
}

http://developer.apple.com/library/ios/#samplecode/PhotoPicker/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010196

「cameraOverlayView」で遊んで、インタラクションが意図したとおりに機能するある種の疑似ナビゲーション バーを作成することをお勧めします。

「イメージ ピッカー コントローラーをカスタマイズして、ユーザー インタラクションを自分で管理できます。これを行うには、表示するコントロールを含むオーバーレイ ビューを提供し、「静止画像または動画のキャプチャ」で説明されている方法を使用します。デフォルト コントロールに加えて、または代わりにカスタム オーバーレイ ビューを表示できます。UIImagePickerController クラスのカスタム オーバーレイ ビューは、iOS 3.1 以降で cameraOverlayView プロパティを使用して使用できます。コード例については、PhotoPicker サンプル コードを参照してください。事業。

重要 UIImagePickerController クラスは、縦向きモードのみをサポートします。このクラスはそのまま使用することを意図しており、サブクラス化はサポートしていません。このクラスのビュー階層はプライベートであり、1 つの例外を除いて変更してはなりません。カスタム ビューを cameraOverlayView プロパティに割り当て、そのビューを使用して追加情報を表示したり、カメラ インターフェイスとコード間の相互作用を管理したりできます。」

http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIImagePickerController_Class/UIImagePickerController/UIImagePickerController.html

于 2012-09-05T18:42:51.450 に答える