web-dev-qa-db-ja.com

カスタムビュー付きカメラ

私のアプリケーションはカメラを使用しています。カメラのプレビューにオーバーレイを追加したいと思います。たとえば、カメラを使用するときに画像フレームを使用したい場合、カメラ操作用のカスタムバーを追加したい場合もあります。親切に私が同じことをするのを助けてください。

40
CrazyDev

UIImagePickerControllerを使用しようとしている可能性があります。しかし、私はあなたの問題に対するこの1つの解決策を知っています。 AVCamCaptureManagerクラスとAVCamRecorderクラスを使用して簡単に実行できます。 Appleは開発者サイトにデモプログラムをビルドしています ここ 。AVCamという名前です。簡単な言葉で言えば、カメラをクリックして開くと、 iPhoneのカメラを開いてビデオを記録したり、オーディオをキャプチャしたりするクラスとメソッドUIImagePickerControllerによって呼び出されるのと同じクラスを呼び出すため、カメラが開いて入力を開始します。

ここで、そのAVCamプロジェクトのxibファイルを開くと、小さなUIViewオブジェクトが見つかります。このビューは、カメラのフィードを表示します。必要なサイズに合わせてビューのサイズを変更でき、カメラの入力はその領域に表示されます。また、選択に応じてフレーム画像をその周りに配置することもできます。

カメラの入力フィードのサイズを変更し、写真をキャプチャしたいときに役立ちました。私もそれがあなたのために働くことを願っています。

56
Dip Dhingani

コードからUIImagePickerControllerを作成し、そのプロパティを調整し、その上にオーバーレイを追加し、コントローラーを使用して、カスタムコントロール、画像のオーバーレイなど、そのオーバーレイで必要なものを制御します。

それは次のようなものを与えます:

self.picker = [[UIImagePickerController alloc] init];
self.picker.sourceType = UIImagePickerControllerSourceTypeCamera;
self.picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;
self.picker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
self.picker.showsCameraControls = NO;
self.picker.navigationBarHidden = YES;
self.picker.toolbarHidden = YES;
self.picker.wantsFullScreenLayout = YES;

// Insert the overlay
self.overlay = [[OverlayViewController alloc] initWithNibName:@"Overlay" bundle:nil];
self.overlay.pickerReference = self.picker;
self.picker.cameraOverlayView = self.overlay.view;
self.picker.delegate = self.overlay;

[self presentModalViewController:self.picker animated:NO];

OverlayViewControllerは、オーバーレイに追加するすべてを制御するために記述する必要があるコントローラーです。

pickerReferenceは、カメラに注文を送信するために保持できるプロパティです。たとえば、オーバーレイに配置されたUIButtonからのIBActionから次を呼び出すことができます。

[self.pickerReference takePicture];
41
Oliver

IImagePickerController Class Reference を読んでください。これはドキュメントにあります…

このプロパティ、特にcameraOverlayViewおよびshowsCameraControlsプロパティがあります。

したがって、コントロールを非表示にし、カスタムオーバーレイビューを提供し、このカスタムビューにサブビューを追加して、カスタムボタン、フレームなどを追加できます。

4
AliSoftware

Oliverからの回答用のSwift 3バージョン:

self.picker = UIImagePickerController()
self.picker.sourceType = .camera
self.picker.cameraCaptureMode = .photo
self.picker.cameraDevice = .rear
self.picker.showsCameraControls = false
self.picker.isNavigationBarHidden = true
self.picker.isToolbarHidden = true

// Insert the overlay
self.overlayViewController = self.storyboard?.instantiateViewController(withIdentifier: "Overlay") as! OverlayViewController

self.picker.cameraOverlayView = self.overlayViewController.view
self.picker.delegate = self.overlayViewController
self.navigationController?.present(self.picker, animated: true, completion: nil)

OverlayViewControllerプロトコル:

class OverlayViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate 
0
NikeAlive