2012-12-12 23 views
5

Sto utilizzando un UIImagePickerController per consentire all'utente di caricare una foto per l'utilizzo nella mia applicazione. Dopo aver selezionato una foto da caricare, l'utente viene quindi invitato a ritagliare la sua foto (poiché ho impostato imagePickerController.allowsEditing = YES). Tuttavia, se la foto è orizzontale (vale a dire, più larga di quanto non sia più alta), è attualmente possibile per l'utente ritagliare la foto in un modo che non restituisca un'immagine quadrata. Questo perché il livello di zoom predefinito durante il ritaglio di foto di paesaggi è aspectFit piuttosto che aspectFill (come per le foto di ritratto).Imposta il livello minimo di zoom per UIImagePickerController ritagliare

È possibile impostare il livello di zoom minimo per la modalità di modifica di UIImagePickerController? Suppongo che potrei semplicemente ritagliare automaticamente l'immagine se l'output non è quadrato, ma preferirei che la modalità di modifica di UIImagePickerController trasmetta questo all'utente all'utente invece di farlo per lui/lei.

risposta

1

Non è possibile regolare il comportamento della funzione di ritaglio/modifica UIImagePickerController in un modo supportato. Potresti potenzialmente scavare nella gerarchia controller/vista UIImagePickerController e provare a capire come funziona, ma questa non è una cosa molto manutenibile o piacevole da fare.

Detto questo, il UIImagePickerController è una sottoclasse di UINavigationController, quindi non c'è nulla ti impedisce di attuare il vostro punto di vista del controller di editing delle immagini e spingendolo sul UIImagePickerController. Questo probabilmente non sarebbe troppo difficile, potresti semplicemente lanciare lo UIImage prelevato in uno UIScrollView con una sovrapposizione rettangolare che mostra l'area di ritaglio, fare un po 'di matematica e ritagliare lo UIImage da solo. Ovviamente, in questo caso, avresti il ​​pieno controllo della funzionalità e scommetto che ci vorrà meno tempo per implementare rispetto alla speleologia di UIImagePickerController.

avrei probabilmente configurarlo qualunque controller di vista presentato il selettore in questo modo:

@interface MainViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate, ImageEditorViewControllerDelegate> 
@end 

@implementation MainViewController { 
    UIImagePickerController* _imagePickerController; 
} 
#pragma mark IBAction 
- (IBAction)pickImage:(id)sender { 
    _imagePickerController = [[UIImagePickerController alloc] init]; 
    _imagePickerController.delegate = self; 
    _imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    _imagePickerController.allowsEditing = NO; 

    [self presentViewController:_imagePickerController animated:YES completion:nil]; 
} 


#pragma mark UIImagePickerControllerDelegate 
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    ImageEditorViewController* imageEditorViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ImageEditor"]; 
    imageEditorViewController.delegate = self; 
    imageEditorViewController.imageToEdit = info[UIImagePickerControllerOriginalImage]; 

    [_imagePickerController pushViewController:imageEditorViewController animated:YES]; 
} 


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


#pragma mark ImageEditorViewControllerDelegate 
- (void)imageEditorViewController:(ImageEditorViewController *)imageEditorViewController didFinishWithInfo:(NSDictionary *)info { 
    // TODO: Handle the edited media 

    [self dismissViewControllerAnimated:YES completion:^{ 
     _imagePickerController = nil; 
    }]; 
} 
@end 

E poi la visualizzazione di modifica avrebbe un'interfaccia come questa (con un'implementazione specifica per le vostre esigenze):

@protocol ImageEditorViewControllerDelegate; 

@interface ImageEditorViewController : UIViewController 
@property(nonatomic, strong) UIImage* imageToEdit; 

@property(nonatomic, weak) id <ImageEditorViewControllerDelegate> delegate; 
@end 

@protocol ImageEditorViewControllerDelegate 
- (void)imageEditorViewController:(ImageEditorViewController*)imageEditorViewController didFinishWithInfo:(NSDictionary*)info; 
@end 
Problemi correlati