2014-06-10 10 views
10

Po przeczytaniu dokumentacji i sample code from apple dotyczącej UIImagePickerController i po przeczytaniu wielu tutoriali, a nawet Questions tutaj w Stackoverflow (or here), doszedłem do wniosku, że wbudowany UIImagePicker jest w stanie przedstawić "okno przycinania" użytkownikowi i pozwól użytkownikowi przyciąć i przesunąć prawą część obrazu, którego chce użyć.UIImagePickerController + Cropping: co pozwala na edycję, a co nie?

Ale sprawdzając te przykłady na iOS 7.1, nie pojawia się okno przycinania. Nie pojawia się nic, co pozwoliłoby użytkownikowi wyciąć część zrobionego zdjęcia. Wszystkie testy zostały przeprowadzone na prawdziwym sprzęcie (iPhone 5S), nie użyto tutaj symulatora iPhone'a z powodu braku kamery;)

Ponadto, przy użyciu metody delegującej "didFinishPickingMediaWithInfo" nie ma wpisu "UIImagePickerControllerEditedImage" w "info" - NSDictionary.

co zrobiłem:

UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; 

#if TARGET_IPHONE_SIMULATOR 
    // iPhone-Simulator has no camera, just save images to the photoalbum on the simulator to use them here 
    imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
#else 
    imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; 
#endif 

    imagePickerController.editing = YES; 
    imagePickerController.delegate = (id)self; 
    imagePickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto; 


    [self presentModalViewController:imagePickerController animated:YES]; 

i metoda delegat:

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
     // .... do something 
} 

W tym momencie, tylko 3 Klucze dostępne są w Słowniku o nazwie "Info":

  • UIImagePickerControllerOriginalImage
  • UIImagePickerControll erMediaMetadata
  • UIImagePickerControllerMediaType

nic innego. Nie pojawiło się również okno przycinania ani inne podobne kontrolki.

Czy mam rację, jeśli chodzi o moje oczekiwania dotyczące zachowania ImagePicker? Na to pytanie SF użytkownik napisał "Crop window comes up". Czy funkcja została usunięta? Czy dokumentacja jest nieaktualna, czy też całkowicie się mylę?

Próbowałem również ten kod zaczerpnięty z innego answer to a similar question:

- (void) imagePickerController:(UIImagePickerController *)picker 
    didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    [picker dismissViewControllerAnimated:YES completion:^{ 
      // Edited image works great (if you allowed editing) 
     UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage]; 
      // AND the original image works great 
     UIImage *originalImage = [info objectForKey:UIImagePickerControllerOriginalImage]; 
      // AND do whatever you want with it, (NSDictionary *)info is fine now 
     UIImage *myImage = [info objectForKey:UIImagePickerControllerEditedImage]; 
    }]; 
} 

nie pojawia się okno przycinania, klawisz „UIImagePickerControllerEditedImage” nie jest obecny na info-NSDictionary.

Czy ktoś może wyjaśnić mi właściwe zachowanie? Z góry bardzo dziękuję.

Odpowiedz

3

ten jest roboty dla mnie:

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    UIImage *originalImage, *editedImage; 

    editedImage = (UIImage *) [info objectForKey:UIImagePickerControllerEditedImage]; 
    originalImage = (UIImage *) [info objectForKey:UIImagePickerControllerOriginalImage]; 

    if (editedImage) 
     self.profilePictureImageView.image = editedImage; 
    else 
     self.profilePictureImageView.image = originalImage; 

    [picker dismissViewControllerAnimated:YES completion:nil]; 
} 
+0

Ma taki sam efekt, jak już opisano w moim pytaniu: nie pojawia się okno przycinania. wszystko, co mogę zrobić, to zrobić zdjęcie lub powtórzyć. – itinance

0

Po pierwsze upewnij się, że import następujący plik nagłówka (trzeba importować ramy MobileCoreServices do projektu):

#import <MobileCoreServices/UTCoreTypes.h> 

Następnie spróbuj wykonać następujące czynności kod

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 

#if TARGET_IPHONE_SIMULATOR 
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]){ 
     imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    } 
#else 
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){ 
     imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
    } 
#endif 

    imagePicker.mediaTypes = @[(NSString *)kUTTypeImage]; 
    imagePicker.allowsEditing = YES; 
    imagePicker.delegate = self; 

    //[self presentModalViewController:imagePicker animated:YES]; <-- This method is deprecated use the following instead 

    [self presentViewController:imagePicker animated:YES completion:nil]; 
Powiązane problemy