iPhone SDK - 如何在UIImagePickerController中禁用图片预览?

17
有没有办法在使用UIImagePickerController拍照后禁用图像预览?我希望在用户按下快门按钮后立即关闭ImagePicker。
2个回答

17

我曾在这里提过类似的问题。

我的解决方案是在默认的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];
}

在这个例子中,拍照的按钮不是很小吗? - Chris
@erastusnjuki 我在iPad上遇到了一个问题。问题是,在从纵向模式切换到横向模式或者从横向模式切换到纵向模式时,工具栏的重新定位效果非常明显(即工具栏在短时间内从一个位置移动到另一个位置)。如何解决这个问题? - Jayprakash Dubey
1
didFinishPickingImage现在已经被弃用了,我认为。 - ThE uSeFuL
链接已损坏。 - jeko

0

这是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)
            }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接