2016-05-19 3 views
0

を使用して画像を参照し、imageviewに表示しようとしています。基本的に私が画像を閲覧するために使用しているビューは、navigationControllerに基づいています。ナビゲーションビューコントローラのIOSイメージピッカー

イメージを選択して表示に戻った後、次のコードを使用すると、ビューが左にちらつき、イメージがイメージビューに表示されていないことがわかります。

実際には、ソースコード全体が終了するので、イメージピッカーの部分のみを投稿しています。必要な場合は、より多くのコードを投稿することができます。

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]; 
} 
+1

このデリゲートメソッドを試してみてください – ozgur

+0

実際、私は静かに新しい、私はその問題を引き起こした、私はそのセクションをコメントしましたが、それでも動作は同じです。 – Haris

+1

少なくともコンテンツモードを更新してから、イメージを設定してから最後にピッカーを解除してください。 – ozgur

答えて

1

あなたはここに示したあなたのコードには問題がありません。

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; 

あなたも、あなたがイメージを取得したり、ブレークポイントを使用していないかどうかを確認することができますに、このコードを移動 - しかしdidFinishPickingImageでこれを試してみてください。 viewcontroller.mファイルで

1

はちょうど私がそれを

#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; 
1

なぜあなたは `` didFinishPickingImage`コールバックでself.imageUser.contentMode`を更新していますか?

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

    UIImage *chosenImage = info[UIImagePickerControllerOriginalImage]; 
    [picker dismissViewControllerAnimated:YES completion:NULL]; 
} 
関連する問題