Невозможно настроить поведение функции UIImagePickerController
кадрирования / редактирования поддерживаемым способом. Вы могли бы покопаться в UIImagePickerController
иерархии контроллеров / представлений и попытаться выяснить, как это работает, но это не очень удобная или приятная вещь.
Сказав это, UIImagePickerController
является подклассом UINavigationController
, поэтому ничто не мешает вам реализовать собственный контроллер представления для редактирования изображений и перенести его на UIImagePickerController
. Это, вероятно, не будет слишком сложно, вы можете просто бросить выбранный UIImage
в UIScrollView
с прямоугольным оверлеем, показывающим область обрезки, выполнить некоторые вычисления и самостоятельно обрезать UIImage
. Очевидно, что в этом случае у вас будет полный контроль над функциональностью, и я уверен, что на реализацию потребуется меньше времени, чем на копание в нутро UIImagePickerController
.
Я бы, вероятно, настроил его независимо от того, какой контроллер представления представил бы средство выбора следующим образом:
@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
И тогда ваше представление редактирования будет иметь такой интерфейс (с реализацией, соответствующей вашим потребностям):
@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
person
Charles A.
schedule
10.08.2013