我正在尝试将相机看到的图像显示在我自己的自定义视图中。我不想为UIImagePickerController使用Apple自己的overlay属性:cameraOverlayView。
我不想要叠加,但它只是在我的特定视图中显示。我能够做到这一点的唯一方法是在我的UIView中创建一个子视图,但这样做不允许我使用我自己制作的任何自定义按钮而不是我的UIView。到目前为止我的代码是:
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的出口!
有什么建议吗?谢谢!
答案 0 :(得分:2)
我自己没有尝试过,但我也想创建自定义相机视图。这可能不是您想要的,但它是另一种选择。我和.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
答案 1 :(得分:1)
希望它会起作用,我只是添加了一个视图,你可以将任何自定义对象添加到选择器的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];
}