重复声明方法' startCameraControllerfromViewController:usingDelegate:'

时间:2014-08-10 02:18:54

标签: ios uiimageview uiimagepickercontroller

我的视图控制器中有两个UI按钮和一个imageview。一个按钮让用户从照片库中选择一张图片并将其添加到UIImage。另一个用户拍摄新照片并在UIimage中显示。

libraryButton和actions都可以工作,但是当我添加cameraButton代码时,我得到一个错误,因为我使用相同的“startcameracontrollerfromviewcontroller”我的问题是我可以简单地将其更改为startcameracontrolfromviewcontroller吗?或者还有什么我必须改变的。

#pragma mark - Button Actions

- (IBAction)libraryButton:(id)sender {
    [self startCameraControllerFromViewController:self usingDelegate:self];
}

#pragma mark - UIImagePickerControllerDelegate methods

- (BOOL) startCameraControllerFromViewController: (UIViewController*) controller usingDelegate: (id <UIImagePickerControllerDelegate, UINavigationControllerDelegate>) delegate {
    if (([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera] == NO) || (delegate == nil) || (controller == nil))
        return NO;

    UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init];
    cameraUI.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

    cameraUI.delegate = delegate;
    [controller presentViewController:cameraUI animated:YES completion:nil];
    return YES;
}

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    UIImage * image = info[UIImagePickerControllerOriginalImage];
    _imageView.image = image;
    [self dismissViewControllerAnimated:YES completion:nil];
}

- (void) imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    [self dismissViewControllerAnimated:YES completion:nil];
}




#pragma mark - Camera Button

- (IBAction)cameraButton:(id)sender {
    [self startCameraControllerFromViewController:self usingDelegate:self];
}


#pragma mark - Camera Delegate methods

- (BOOL) startCameraControllerFromViewController: (UIViewController*) controller usingDelegate: (id <UIImagePickerControllerDelegate, UINavigationControllerDelegate>) delegate {
    if (([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera] == NO) || (delegate == nil) || (controller == nil))
        return NO;

    UIImagePickerController *cameraUI = [[UIImagePickerController alloc] init];
    cameraUI.sourceType = UIImagePickerControllerSourceTypeCamera;

    cameraUI.delegate = delegate;
    [controller presentViewController:cameraUI animated:YES completion:nil];
    return YES;
}

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    UIImage * image = info[UIImagePickerControllerOriginalImage];
    _imageView.image = image;
    [self dismissViewControllerAnimated:YES completion:nil];
}

- (void) imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    [self dismissViewControllerAnimated:YES completion:nil];
}




@end

1 个答案:

答案 0 :(得分:0)

您可以从每个 IBAction 调用相同的方法,将其传递给另一个值,该值将用于确定图像选择器源类型 - (对于此示例,我没有传入呈现视图控制器或委托,但这可以很容易地适应实现)

- (IBAction)libraryButton:(id)sender {
    [self showImagePickerForSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
}

- (IBAction)cameraButton:(id)sender {
    [self showImagePickerForSourceType:UIImagePickerControllerSourceTypeCamera];
}

- (void)showImagePickerForSourceType:(UIImagePickerControllerSourceType)sourceType {
    // start config here....

    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
    imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext;
    // set the source type here
    imagePickerController.sourceType = sourceType;

    // do any extra setting up... present controller...
}

我建议查看Apple提供的示例代码 - Using UIImagePickerController to Select Pictures and Take Photos