Es ist nicht möglich, das Verhalten der Funktion UIImagePickerController
Zuschneiden/Bearbeiten auf eine unterstützte Weise anzupassen. Sie könnten möglicherweise in die UIImagePickerController
Controller/View-Hierarchie graben und versuchen, herauszufinden, wie es funktioniert, aber das ist nicht eine sehr wartungsfreundliche oder angenehme Sache zu tun.
Having said, dass die UIImagePickerController
eine Unterklasse von UINavigationController
ist, so gibt es nichts hindert Sie daran aus dem eigenen Bildbearbeitungs View-Controller-Implementierung und auf den UIImagePickerController
schieben. Dies wäre wahrscheinlich nicht zu schwer, Sie könnten einfach die gepflückt UIImage
in eine UIScrollView
mit einem rechteckigen Overlay werfen, die den Ausschnitt zeigen, etwas Mathe, und schneiden Sie die UIImage
selbst. Sie würden natürlich die volle Kontrolle über die Funktionalität in diesem Fall haben und ich wette, es würde weniger Zeit in Anspruch nehmen, als das Eintauchen in den Mut von UIImagePickerController
.
würde ich stelle es wahrscheinlich auf, was View-Controller die Picker wie folgt dargestellt:
@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
Und dann würde Ihre Bearbeitungsansicht eine Schnittstelle wie diese hat (mit einer Implementierung speziell für Ihre Bedürfnisse):
@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