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
fonte
2013-08-10 17:59:16