UIImagePickerController позволяет редактирование не работает
Я использую UIImagePickerController, чтобы позволить пользователю сделать снимок. Я хочу позволить ему отредактировать его потом, но что бы я ни делал, я ничего не получаю. Вот мой код (я использую Xamarin):
UIImagePickerController imagePicker = new UIImagePickerController ();
// set our source to the camera
imagePicker.SourceType = UIImagePickerControllerSourceType.Camera;
// set what media types
//imagePicker.MediaTypes = UIImagePickerController.AvailableMediaTypes (UIImagePickerControllerSourceType.Camera);
// show the camera controls
imagePicker.ModalPresentationStyle = UIModalPresentationStyle.CurrentContext;
imagePicker.ShowsCameraControls = true;
imagePicker.AllowsEditing = true;
imagePicker.SetEditing (true,true);
imagePicker.PreferredContentSize = new SizeF(900,600);
imagePicker.CameraCaptureMode = UIImagePickerControllerCameraCaptureMode.Photo;
imagePicker.Title="taste.eat. image";
// attach the delegate
imagePicker.Delegate = new ImagePickerDelegate();
// show the picker
NavigationController.PresentViewController(imagePicker, true,null);
Я что-то пропустил?
РЕДАКТИРОВАТЬ:
Я следовал этому уроку, и я попадаю на экран с прямоугольником, но если я перемещаю или увеличиваю масштаб, он просто возвращается к центру, как только я поднимаю палец. Возможно ли попасть на этот экран из приложения для фотографий?
5 ответов
При использовании делегата UIImagePickerController -imagePickerController:didFinishPickingMediaWithInfo: мы получаем изображение, используя
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
Этот код всегда возвращает исходное изображение, даже если редактирование включено.
Попробуйте использовать
UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];
Это вернет отредактированное изображение, если редактирование включено.
Надеюсь это поможет.
AllowsEditing
Свойство просто позволяет пользователю обрезать до квадрата при выборе изображения и обрезать видео при выборе видео.
Любая другая функциональность должна быть реализована с помощью пользовательского интерфейса и кода.
См. Этот вопрос: iPhone SDK - Как настроить прямоугольник обрезки в UIImagePickerController при включенном разрешении редактирования?
То, что вы показываете на скриншоте, не является частью UIImagePickerController
, к несчастью
SWIFT 3
Мне было трудно вернуть обрезанное изображение (простая ошибка с моей стороны). Вместо использования UIImagePickerControllerOriginalImage вам нужен UIImagePickerControllerEditedImage. Увидеть ниже:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
// The info dictionary contains multiple representations of the image, and this uses the cropped image.
let selectedImage = info[UIImagePickerControllerEditedImage] as! UIImage
// Set yourImageView to display the selected image.
yourImage.image = selectedImage
// Dismiss the picker.
dismiss(animated: true, completion: nil)
}
SWIFT 4+
После Swift 4 произошли некоторые изменения. UIImagePickerControllerEditedImage
изменился на UIImagePickerController.InfoKey.editedImage
,
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
let selectedImage = info[UIImagePickerController.InfoKey.editedImage] as! UIImage
imageView.image = selectedImage
dismiss(animated: true, completion: nil)
}
Так будет работать.
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let selectedImage = info[UIImagePickerControllerEditedImage] as! UIImage
userPhoto.image = selectedImage
dismiss(animated: true, completion: nil)
}
Там нет никакого способа enable filters
просто изменив свойство, как allowsEditing = YES
, Он будет отображать только инструмент обрезки. В соответствии с вашим скриншотом, похоже, что вы интегрировали какую-то глючную библиотеку с открытым исходным кодом, и, не глядя на исходный код, было бы трудно исправить ошибку обрезки по центру.
Лучше опубликовать некоторые конкретные детали о вашей реализации или перейти на стандартную библиотеку с открытым исходным кодом.