导航视图控制器中的IOS图像选择器

时间:2016-05-19 06:00:54

标签: ios objective-c uiimagepickercontroller

我正在尝试使用imageview浏览图片并在UIImagePickerController中显示。基本上我用来浏览图像的视图基于navigationController

但是在我选择图像并返回查看后使用下面的代码,我可以看到视图向左闪烁并且图像未在图像视图中显示。

实际上整个源代码都退出了,这就是为什么我只发布图像选择器部分。如果需要,我可以发布更多代码。

RegistrationFormViewController.h

@interface RegistrationFormViewController : ViewController
<UIImagePickerControllerDelegate,UINavigationControllerDelegate,CLLocationManagerDelegate>
{
    CLLocationManager *locationManager;
    UIImagePickerController *imagePickerController;
}
@property (strong, nonatomic) CLLocationManager *locationManager;
@property (weak, nonatomic) IBOutlet UIImageView *imageUser;

- (IBAction)registerBt:(id)sender;

RegistrationFormViewController.m

- (void)viewDidLoad {
    [super viewDidLoad];

    _barButtonBack.target = self.revealViewController;
    _barButtonBack.action = @selector(revealToggle:);
    [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];


    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapDetected)];
    singleTap.numberOfTapsRequired = 1;
    [self.imageUser setUserInteractionEnabled:YES];
    [self.imageUser addGestureRecognizer:singleTap];
}



-(void)tapDetected{
    NSLog(@"single Tap on imageview");
    imagePickerController = [[UIImagePickerController alloc]init];
    imagePickerController.delegate = self;
    imagePickerController.sourceType =  UIImagePickerControllerSourceTypePhotoLibrary;
    [self presentViewController:imagePickerController animated:YES completion:nil];
}

#pragma mark - ImagePickerController Delegate

- (void)imagePickerController:(UIImagePickerController *)picker
        didFinishPickingImage:(UIImage *)image
                  editingInfo:(NSDictionary *)editingInfo
{
    // Dismiss the image selection, hide the picker and

    //show the image view with the picked image

    [picker dismissViewControllerAnimated:YES completion:nil];
    [self.imageUser setImage:image];

     self.imageUser.contentMode = UIViewContentModeScaleAspectFill;
}

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

3 个答案:

答案 0 :(得分:1)

您在此处显示的代码中没有任何问题。但是请在didFinishPickingImage中尝试这个 -

dispatch_async(dispatch_get_main_queue(), ^{
    self.imageUser.contentMode = UIViewContentModeScaleAspectFill;
     [self.imageUser setImage:image];

    });

并将此代码移至viewDidLoad

imagePickerController = [[UIImagePickerController alloc]init];
    imagePickerController.delegate = self;
    imagePickerController.sourceType =  UIImagePickerControllerSourceTypePhotoLibrary;

您还可以使用断点检查是否正在获取图像。

答案 1 :(得分:1)

在viewcontroller.m文件中,只需输入以下代码:

#import <AssetsLibrary/AssetsLibrary.h>
typedef void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *asset);
typedef void (^ALAssetsLibraryAccessFailureBlock)(NSError *error);
- (IBAction)Gallery:(id)sender {

self.ImagePickerController = [[UIImagePickerController alloc]init];
self.ImagePickerController.delegate = self;
self.ImagePickerController.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
[self presentViewController:self.ImagePickerController animated:YES completion:nil];
}

- (IBAction)Camera:(id)sender {

    self.ImagePickerController = [[UIImagePickerController alloc]init];
    self.ImagePickerController.delegate = self;
    self.ImagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
    [self presentViewController:self.ImagePickerController animated:YES completion:nil];

}

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{
    [picker dismissViewControllerAnimated:YES completion:nil];


    NSURL *imageUrl  = (NSURL *)[info objectForKey:UIImagePickerControllerReferenceURL];
    ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
    {
        ALAssetRepresentation *representation = [myasset defaultRepresentation];
        CGImageRef resolutionRef = [representation fullResolutionImage];

        if (resolutionRef) {
            UIImage *image = [UIImage imageWithCGImage:resolutionRef scale:1.0f orientation:(UIImageOrientation)representation.orientation];
            self.SelectedImage.image =image;

        }
    };
    ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror)
    {
        NSLog(@"cant get image - %@",[myerror localizedDescription]);
    };

    if(imageUrl)
    {
        ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc]init];
        [assetslibrary assetForURL:imageUrl resultBlock:resultblock failureBlock:failureblock];
    }

}

在viewcontroller.h文件中

@interface ViewController : UIViewController<UIImagePickerControllerDelegate,UINavigationControllerDelegate>
@property (nonatomic)UIImagePickerController *ImagePickerController;
@property (weak, nonatomic) IBOutlet UIImageView *SelectedImage;

答案 2 :(得分:1)

尝试此委托方法

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

     UIImage *chosenImage = info[UIImagePickerControllerOriginalImage];
     [picker dismissViewControllerAnimated:YES completion:NULL];
}