【问题标题】:Get picture I take with UIImagePickerController获取我用 UIImagePickerController 拍摄的照片
【发布时间】:2013-04-09 15:10:36
【问题描述】:

我正在尝试制作我的第一个 iOS 应用程序,但在获取刚刚拍摄的照片时遇到了一些问题。

这是我的方法:

- (void)viewDidLoad
{
    [super viewDidLoad];
    //add imagePicker
    _imgPicker = [[UIImagePickerController alloc] init];
    _imgPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
    _imgPicker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;
    _imgPicker.cameraDevice = UIImagePickerControllerCameraDeviceFront;
    _imgPicker.showsCameraControls = NO;
    _imgPicker.navigationBarHidden = YES;
    _imgPicker.toolbarHidden = YES;
    _imgPicker.wantsFullScreenLayout = NO;

    //add overlay on imagePicker
    _imageSilhouette.image = [UIImage imageNamed:_pose.image];
    _imgPicker.cameraOverlayView = _imageSilhouette;
    [_vImagePreview addSubview:_imgPicker.view];
}

当我点击一个按钮时,我有一个计时器,10秒后,我拍照:

- (void)decreaseTimerCount
{
    _lblTimer.text = [NSString stringWithFormat:@"%d", --_timerCount];
    if(_timerCount==0)
    {
        [self takePicture];
    }
}
-(void) takePicture{
    [_timer invalidate];
    [_imgPicker takePicture];
}

正如我在 Apple 文档中看到的,我添加了委托:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage * img = [info objectForKey:UIImagePickerControllerOriginalImage];
    _imageSilhouette.image = img;
    _imgPicker.cameraOverlayView = _imageSilhouette;
    //[picker dismissModalViewControllerAnimated:YES];
}

但我真的不明白是否必须在某处声明 imagePickerController..

我也不明白 img 是否包含我刚拍的照片?

我可以帮忙吗?

【问题讨论】:

    标签: ios uiimagepickercontroller image


    【解决方案1】:

    您没有设置选择器的委托

    在您设置图像选择器的代码中,您需要添加:

    _imgPicker.delegate = self;
    

    另外,在您制作选择器的文件的.h 文件中,您需要在<> 之间添加代码

    @interface SomeClass:NSObject <UIImagePickerControllerDelegate>
    

    除了在 .h 文件中添加协议之外,您还可以选择在 .m 文件中添加(更好的)选项。这样做可以避免告诉世界您的班级使用了图像选择器:

    @interface SomeClass () <UIImagePickerControllerDelegate>
    @end
    

    在对应的@implementation 行之前添加它。

    【讨论】:

    • 不应将协议添加到 .h 文件中的 @interface 中,而应将其添加到 .m 文件中的类扩展中。
    • @rmaddy 真的吗?你是怎样做的?随意编辑我的答案并教我 OP!
    • 对不起,我是新手,但你让我添加的 2 行给我发送了一些错误:对于_imgPicker.delegate = self;,它说我不能分配不兼容的类型(自我似乎是我的班级名称“SilhouetteViewCtrl”而不是 UIImagePickerController)。第二,当我写:@interface SilhouetteViewCtrl : BaseViewCtrl &lt;UIImagePickerDelegate&gt;,它不起作用,但适用于:UIImagePickerControllerDelegate
    • @angelos 使用 UIImagePickerControllerDelegate。在 iPad 上回答问题 - 我无法使用编译器。我会编辑答案。
    • 好的,非常感谢。现在一切正常,即使图片是颠倒的,我不知道为什么:)。
    猜你喜欢
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    相关资源
    最近更新 更多