Commonlife's Blog

My daily life

iOS : 갤러리를 통해 가져오는 이미지 crop하기

leave a comment »

기본 갤러리 혹은 카메라를 통해 이미지를 가져올 때 crop하여 가져오게 하고 싶었는데 기존 소스를 수정해야 했다. 문제는 기존의 ViewController들을 거쳐야 한다는 점.

AviewController에서 ActionSheet를 통해서 갤러리 혹은 카메라를 선택하게 한 후 이미지를 선택하면 선택한 이미지를 BviewController에서 띄우고 여기서 NavigationBar를 이용해 서버에 등록한다.

이 과정에서 crop 단계를 추가한 것이다. 그런데 문제가 BviewController에서 NavigationBar가 나오지 않는 문제점이 발생되는 것이다.

– 앨범에서 사진 가져오기 : UIImagePickerControllerSourceTypePhotoLibrary

– 필요한 것들 :

  • UIImagePickerControllerDelegate : image를 가져오기 위한 delegate.
  • UINavigationControllerDelegate : image를 가져온 후 navigation bar에서 ok, cancel을 위한 delegate.
  • UIImagePickerController : Image Picker를 가져오기 위한 변수

 

– source : 호출하려는 화면의 AviewController에서

UIImagePickerController *imgPickerController = [[UIImagePickerControlleralloc] init];
[imgPickerControllersetDelegate:self];
imgPickerController.allowsEditing = YES;     //편집모드(crop)
[imgPickerControllersetSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
// 갤러리에서 이미지를 가져옴.

//[imgPickerControllersetSourceType:UIImagePickerControllerSourceTypeCamera];
// 카메라를 통해 이미지를 가져옴.

[selfpresentModalViewController:imgPickerControlleranimated:YES];                     // 화면전환.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // 이미지를 가져온 후 처리작업.
    UIImage *cameraImage = [info objectForKey:UIImagePickerControllerEditedImage];

    // 카메라에서 가져온 경우 : 카메라로 사진을 찍고 바로 사용하기 때문에 ViewController를 만들 필요는 없음.
    if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {
        UIImageWriteToSavedPhotosAlbum(UIImage *image, id completionTarget, SEL completionSelector, void *contextInfo);
        [self dismissModalViewControllerAnimated:YES];
    }

    // 갤러리에서 가져온 경우 : 이미지를 가지고 새로운 ViewController를 만들어줘야 함.
    else if (picker.sourceType == UIImagePickerControllerSourceTypePhotoLibrary) {
        // crop한 이미지를 가지고 새로운 ViewController 만들기
        [picker pushViewController:newViewController animated:YES];
    }
}

– 새로운 ViewController에서 닥친 문제점은 기존에 사진을 바로 보여줄 때 NavigationBar가 잘 보이고 버튼들도 잘 보였음. 그런데 crop한 이미지로 대체하자 NavigationBar가 검은색으로만 나옴. 버튼들도 보이지 않아 작동하지 못함.

– BviewController에서 추가한 코드(원인은 찾지 못했지만 아래 코드를 넣어야만 navigationbar가 나타남.)

  • self.navigationController.navigationBarHidden=NO;
Advertisements

Written by tocommonlife

2012/09/14 , 시간: 02:29

답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: