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, Он будет отображать только инструмент обрезки. В соответствии с вашим скриншотом, похоже, что вы интегрировали какую-то глючную библиотеку с открытым исходным кодом, и, не глядя на исходный код, было бы трудно исправить ошибку обрезки по центру.

Лучше опубликовать некоторые конкретные детали о вашей реализации или перейти на стандартную библиотеку с открытым исходным кодом.

Другие вопросы по тегам