Как использовать [camera takePhoto] и редактировать с помощью UIImagePicker - UIImagePickerController.allowsEditing = YES
Я буду чувствовать себя глупым, но я искал везде и не нашел ответа. Мне удалось вывести "редактировать" вид с помощью элементов управления камеры по умолчанию. Однако я наложил на него оверлей, и у меня есть UIButton, подключенный к снимку IBAction, который выглядит как [UIImagePickerController takePicture].
Тем не менее, он полностью пропускает часть редактирования, хотя я установил, что позволяет редактировать в YES. Есть ли другая команда для его вызова? Прямо сейчас все идет прямо к didFinishPickingMediaWithInfo.
camera.sourceType = UIImagePickerControllerSourceTypeCamera;
camera.cameraDevice = UIImagePickerControllerCameraDeviceRear;
camera.showsCameraControls = NO;
camera.navigationBarHidden = YES;
camera.toolbarHidden = YES;
camera.wantsFullScreenLayout = NO;
camera.allowsEditing = YES;
camera.cameraOverlayView = overlay;
[self presentViewController:camera animated:YES completion:nil];
тогда в IBAction
[camera takePicture];
2 ответа
Возможный дубликат: UIImagePickerController не показывает экран редактирования
Согласно takePicture: метод в документации Apple:
Используйте этот метод в сочетании с настраиваемым видом наложения, чтобы инициировать программный захват неподвижного изображения. Это позволяет делать несколько снимков, не выходя из интерфейса, но требует, чтобы вы скрыли стандартные средства выбора изображений по умолчанию.
Вызов этого метода во время захвата изображения не имеет никакого эффекта. Необходимо подождать, пока связанный объект делегата не получит сообщение imagePickerController: didFinishPickingMediaWithInfo:, прежде чем вы сможете захватить другое изображение.
Кажется, что этот подход (пользовательское наложение) настроен для того, чтобы им можно было управлять самостоятельно. Даже если "allowEditing = YES", сделанный снимок будет напрямую отправлен в imagePickerController:didFinishPickingMediaWithInfo:.
Исходя из этого, если мы хотим отредактировать снимок с помощью нашего пользовательского интерфейса, мы должны создать соответствующий экран для этой цели.
Для дальнейшего использования:
Проблема не отображения экрана редактирования связана с камерой.showCameraControls = NO; наличие или отсутствие наложения не имеет к этому никакого отношения (как говорится в текущем принятом ответе)
Возможный обходной путь: на вашем IBAction [camera takePicture] снова установите для них значение YES. Они будут отображаться только в течение доли секунды, и это позволит отобразить экран редактирования. Тогда у вас возникнет проблема при нажатии кнопки "Возврат", в этом случае вам придется захватить это действие с помощью делегата и снова спрятать его там.