有没有办法在使用UIImagePickerController拍照后禁用图像预览?我希望在用户按下快门按钮后立即关闭ImagePicker。
我曾在这里提过类似的问题。
我的解决方案是在默认的UIImagePickerControllerView上创建自定义视图。
我下载了增强现实的示例。
然后,您可以通过将OverlayView.m和OverlayView.h添加到项目中来使用它们:
我将自定义选择器工具栏、选择器和覆盖视图设置为全局变量,以便在项目的任何地方都可以访问它们。
在您的ViewController.h文件中:
@class OverlayView;
@interface ViewController //bla bla...
{
UIImagePickerController * picker;
UIToolbar *toolBar;
OverlayView *overlayView;
}
我创建了工具栏的控件,包括相机按钮和取消按钮。
// toolbar - handy if you want to be able to exit from the image picker...
toolBar=[[[UIToolbar alloc] initWithFrame:CGRectMake(0, 480-55, 320, 55)] autorelease];
toolBar.barStyle = UIBarStyleBlackOpaque;
NSArray *items=[NSArray arrayWithObjects:
[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelPicture)] autorelease],
[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease],
[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action:@selector(shootPicture)] autorelease],
[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease],
[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease],
nil];
[toolBar setItems:items];
// create the overlay view
overlayView=[[[OverlayView alloc] initWithFrame:CGRectMake(0, 0, 320, 480-44)] autorelease];
// important - it needs to be transparent so the camera preview shows through!
overlayView.opaque=NO;
overlayView.backgroundColor=[UIColor clearColor];
// parent view for our overlay
UIView *parentView=[[[UIView alloc] initWithFrame:CGRectMake(0,0,320, 480)] autorelease];
[parentView addSubview:overlayView];
[parentView addSubview:toolBar];
// configure the image picker with our overlay view
picker=[[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
// hide the camera controls
picker.showsCameraControls=NO;
picker.wantsFullScreenLayout = YES;
- (IBAction)cancel {
// Don't pass current value to the edited object, just pop.
[self.navigationController popViewControllerAnimated:YES];
}
拍照方法 (shootPictureMethod):
-(void) shootPicture {
[picker takePicture];
}
要在不显示预览的情况下退出,请在didFinishPickingImage方法中拍摄照片后关闭视图。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo
{
//do whatever
[self dismissModalViewControllerAnimated:YES];
}
这是Swift版本:
/// toolbar - handy if you want to be able to exit from the image picker...
toolBar = UIToolbar(frame: CGRect(x: 0, y: 480 - 55, width: 320, height: 55))
toolBar?.barStyle = UIBarStyle.black
let items = [
UIBarButtonItem(barButtonSystemItem: .cancel, target: self,
action:#selector(cancelPicture)),
UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil),
UIBarButtonItem(barButtonSystemItem: .camera, target: self,
action:#selector(shootPicture))
]
toolBar?.items = items
// create the overlay view
let overlayView = OverlayView()
overlayView.view.frame = CGRect(x: 0, y: 0, width: 320, height: 480 - 44)
// important - it needs to be transparent so the camera preview shows through!
overlayView.view.isOpaque = false
picker.view.addSubview(overlayView.view)
picker.view.addSubview(toolBar!)
// hide the camera controls
picker.showsCameraControls = false
picker.cameraOverlayView = overlayView.view
toolBar?.snp.makeConstraints{(make) -> Void in
make.width.equalTo(180)
make.height.equalTo(50)
make.top.equalTo(picker.view.snp.bottom).offset(-200)
make.centerX.equalTo(picker.view.snp.centerX)
}