使用相机作为子视图

时间:2011-05-06 19:09:28

标签: iphone objective-c ios ipad

我在我的应用程序中使用UIImagePickerControllerSourceTypeCamera,但想要将摄像机视图添加到子视图中。不是模态视图。

现在我正在使用

UIImagePickerController * picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.delegate = self;
[self presentModalViewController:picker animated:YES];   

我想像这样使用它,但似乎不起作用..

UIImagePickerController * picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.delegate = self;
[picker.view setFrame:CGRectMake(300, 40, 300, 200)];
[self.view addSubview:picker.view];

我知道UIImagePickerControllerSourceTypeCamera只能用作模态视图。 例如Hipstamatic如何使用它?

3 个答案:

答案 0 :(得分:10)

使用AVCaptureSession framework可以在iOS 4+中实现。它比使用UIImagePickerController复杂得多,但您可以完全控制输入和输出。将摄像机视图作为子视图的关键是以下代码。假设您有一个名为previewView的子视图,您想要显示摄像机视图:

AVCaptureSession *session = [[AVCaptureSession alloc] init];
AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:session];
previewLayer.frame = self.previewView.bounds; 
[self.previewView.layer addSublayer:previewLayer];

要为AVCaptureSession对象提供正确的输入和输出设备以及实际拍摄照片,还需要做更多的设置工作。这可以在网络上的文档和示例中找到。

答案 1 :(得分:0)

你没错,唯一支持的显示UIImagePickerController的方法似乎是presentModalViewController:animated:或UIPopoverController。

我对Hipstamatic不太熟悉,但很有可能使用AVFoundation,特别是AVCaptureVideoPreviewLayer

答案 2 :(得分:0)

访问link,了解如何完成任务。在developer.apple.com资源中查找IOS程序的AVCam Demo。你一定会知道它是如何工作的。您应该是APPLE的注册开发人员,这很容易。

希望它有所帮助。