Ios 使用UIImagePickerController使UIView显示摄影机视图
我正在尝试将相机看到的图像显示到我自己的自定义视图中。我不想为UIImagePickerController使用苹果自己的overlay属性:cameraOverlayView 我不想要一个覆盖,但它只是显示在我的特定视图。我能做到这一点的唯一方法是在UIView中创建一个子视图,但这样做不允许我使用在UIView上制作的任何自定义按钮。到目前为止,我的代码是:Ios 使用UIImagePickerController使UIView显示摄影机视图,ios,objective-c,uiview,camera,uiimagepickercontroller,Ios,Objective C,Uiview,Camera,Uiimagepickercontroller,我正在尝试将相机看到的图像显示到我自己的自定义视图中。我不想为UIImagePickerController使用苹果自己的overlay属性:cameraOverlayView 我不想要一个覆盖,但它只是显示在我的特定视图。我能做到这一点的唯一方法是在UIView中创建一个子视图,但这样做不允许我使用在UIView上制作的任何自定义按钮。到目前为止,我的代码是: UIImagePickerController *imagePickerController = [[UIImagePickerCon
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
[imagePickerController setSourceType:UIImagePickerControllerSourceTypeCamera];
[imagePickerController setShowsCameraControls:NO];
[imagePickerController setEditing:NO];
[imagePickerController setNavigationBarHidden:YES];
[self.videoPreviewView addSubview:[imagePickerController view]];
[imagePickerController viewWillAppear:YES];
其中videoPreviewView是我的UIView的出口
有什么建议吗?谢谢 希望它能起作用,我刚刚添加了一个视图,您可以将任何自定义对象添加到选择器的overlayview中
if ([UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeCamera]){
imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType =
UIImagePickerControllerSourceTypeCamera;
imagePicker.showsCameraControls = NO;
imagePicker.allowsEditing = NO;
NSString *nibName = @"CameraView";
NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:nibName
owner:nil
options:nil];
if([nibs count]){
id nib = [nibs objectAtIndex:0];
if([nib isKindOfClass:[CameraView class]]){
CameraView *view = (CameraView*)nib;
view.delegate = self;
imagePicker.cameraOverlayView = view;
}
}
[self presentViewController:imagePicker
animated:NO completion:nil];
}
我还没有尝试过你的方式,但我也想创建一个自定义的相机视图。这可能不是您想要的,但它是一个替代方案。我与.xib文件一起创建了一个自定义UIView 在.m文件中,您只需将适当的委托方法调用到您实例化imagePicker的ViewController。在此ViewController中,然后调用适当的方法,如
takePicture
通过这种方式,您可以使用xib文件使覆盖看起来像任何您喜欢的方式。您可以实例化图像选择器
FALKCameraView.h :
@protocol CameraViewDelegate <NSObject>
- (void)cameraPressed;
- (void)buttonPressed;
//etc
@end
@interface FALKCameraView : UIView
@property (nonatomic, assign) NSObject<CameraViewDelegate> *delegate;
//Camera Button pressed- notifies CameraViewDelegate
- (IBAction)cameraPressed:(id)sender;
//Button pressed - notifies CameraViewDelegate
-(IBAction)buttonPressed:(id)sender;
@end
FALKCameraView.m:
@implementation FALKCameraView
@synthesize delegate;
- (IBAction)cameraPressed:(id)sender{
[delegate cameraPressed];
}
-(IBAction)buttonnPressed:(id)sender{
[delegate buttonPressed];
}
@end
FALKCameraViewController.h:
@interface FALKCameraViewController : UIViewController <UIImagePickerControllerDelegate, CameraViewDelegate>
- (void)cameraPressed;
- (void)buttonPressed;
@end
FALKCameraViewController.m:
@interface FALKCameraViewController
@property (strong,nonatomic) UIImagePickerController *imagePicker;
@end
@implementation FALKCameraViewController
@synthesise imagePicker;
-(void)setUpCamera{
if ([UIImagePickerController isSourceTypeAvailable:
UIImagePickerControllerSourceTypeCamera]){
imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType =
UIImagePickerControllerSourceTypeCamera;
imagePicker.showsCameraControls = NO;
imagePicker.allowsEditing = NO;
imagePicker.mediaTypes = @[(NSString *) kUTTypeImage];
NSString *nibName = @"FALKCameraView";
NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:nibName
owner:nil
options:nil];
if([nibs count]){
id nib = [nibs objectAtIndex:0];
if([nib isKindOfClass:[FALKCameraView class]]){
FALKCameraView *view = (FALKCameraView*)nib;
view.delegate = self;
imagePicker.cameraOverlayView = view;
}
}
[self presentViewController:imagePicker
animated:NO completion:nil];
}
}
-(void)cameraPressed:(id)sender{
[imagePicker takePicture];
}
@end
FALKCameraView.h:
@协议摄像机网关
-(无效)摄像加压;
-(无效)按下按钮;
//等
@结束
@接口FALKCameraView:UIView
@属性(非原子,赋值)NSObject*委托;
//按下摄像头按钮-通知CameraViewDelegate
-(iAction)摄像机显示:(id)发送方;
//按下按钮-通知CameraViewDelegate
-(iAction)按钮按下:(id)发送者;
@结束
FALKCameraView.m:
@实施FALKCameraView
@综合代表;
-(iAction)摄像机显示:(id)发送方{
[拍摄代表照片];
}
-(iAction)按钮按下:(id)发送者{
[按下代表按钮];
}
@结束
FALKCameraViewController.h:
@接口FALKCameraViewController:UIViewController
-(无效)摄像加压;
-(无效)按下按钮;
@结束
falkcameravewcontroller.m:
@接口FALKCameraViewController
@属性(强,非原子)UIImagePickerController*imagePicker;
@结束
@falkcameravewcontroller的实现
@综合图像采集器;
-(无效)设置摄影机{
如果([UIImagePickerController]资源类型可用:
UIImagePickerControllerSourceTypeCamera]){
imagePicker=[[UIImagePickerController alloc]init];
imagePicker.delegate=self;
imagePicker.sourceType=
UIImagePickerControllerSourceTypeCamera;
imagePicker.showsCameraControls=否;
imagePicker.allowsEditing=否;
imagePicker.mediaTypes=@[(NSString*)kUTTypeImage];
NSString*nibName=@“FALKCameraView”;
NSArray*nibs=[[NSBundle mainBundle]loadNibNamed:nibName
业主:无
选项:无];
如果([笔尖计数]){
id nib=[nibs objectAtIndex:0];
if([nib是类的种类:[FALKCameraView类]]){
FALKCameraView*视图=(FALKCameraView*)nib;
view.delegate=self;
imagePicker.cameraOverlayView=视图;
}
}
[自呈现视图控制器:图像选择器]
动画:无完成:无];
}
}
-(无效)摄像机显示:(id)发送方{
[图像采集器拍摄];
}
@结束
您的自定义按钮是否识别触摸,您是否为这些按钮创建了操作?@Bonnie Yes。我已经为所有按钮创建了动作,它们可以识别触摸。但是,当我实现覆盖时,它们不会!谢谢你的帮助,但我正在使用故事板。。。这有区别吗?尽管我尝试实现它,但在行中出现了一个错误:imagePicker.cameraView=view;在我的代码中,我需要用什么替换cameraView?喜欢viewcontroller的名称吗?非常感谢你的帮助!我在项目的其余部分也使用故事板,您仍然可以从自定义的.xib文件加载。你犯了什么样的错误?您是否使用自己的.xib文件等创建了独立的UIView子类?“CameraView”是我创建的自定义UIView的名称。所以您应该有:CameraView.h、CameraView.m和CameraView.xib。现在只需将xib中的UI保留为空,并确保将xib中的视图类设置为CameraView。哦,好吧,有两件事:您需要在视图控制器中实现协议“CameraViewDelegate”-这是我在上面的“.h”文件代码中为您提供的协议。现在是第二个错误-属性的名称没有更改。如果将自定义“UIView”调用为“FALKCameraView”,则代码应为:“imagePicker.cameraView=view;”正如上面所说的那样。”“cameraView”是“imagePicker”的内置属性,您不能更改它。而“view”是上面代码中的一个变量,它被实例化为“(CameraView*)nib”,因此,如果您将自定义UIView称为“FalkCameraView”,那么您会将其实例化为该变量。只需将上述代码中的“CameraView”替换为“FalkCameraView”。)谢谢你的帮助!我还试图实现这一点。我并不真的想要一个有覆盖层的,但我正在尝试。它在Utils
上出现了一个错误。我试着搜索它,但我仍然不知道它是什么或它做什么。。。我必须在我的代码中替换它吗?或者你知道它出错的原因吗?干杯:)