uiimagepickercontrollerdelegate open example ios swift uiimagepickercontroller

ios - open - Rango de toque del control deslizante(recuadro) del recortador de video "apagado"



uiimagepickercontroller swift 4 example (3)

He reproducido el problema usando un UIImagePickerController directamente.

Aquí hay un código que puede llamar desde su viewController:

let picker = UIImagePickerController() picker.allowsEditing = true picker.mediaTypes = [String(kUTTypeMovie)] picker.videoMaximumDuration = 12.0 present(picker, animated: true, completion: nil)

Supongo que hay un conflicto de gestos con algunas vistas internas solo en el lado izquierdo de la pantalla; una vez que haya tirado del asa izquierda en algún lugar en el medio, puede acceder a él directamente.

Además, esto no parece ser nuevo: IOS 11 UIImagepicker para video ¿cómo mover el control deslizante a la parte inferior?

Lo mejor que puedes hacer es presentar un radar a Apple.

Mientras tanto, puede utilizar la biblioteca sugerida por Awais Fayyaz como solución alternativa. (Descargo de responsabilidad: soy el autor de la biblioteca, por lo que estoy sesgado, por supuesto). Otra opción sería usar un UIVideoEditorController una vez que el usuario haya seleccionado el video, ese componente no tiene ningún problema en iOS 11.

Estoy usando FDTake (el pod no será demasiado importante para esta pregunta, pero aún así) para seleccionar videos de Fotos que funcionen bien. Sin embargo, también me gustaría poder editar videos y limitar su duración a unos 12 segundos. Para hacerlo, miré el código del pod y cambié la línea 271 a self.imagePicker.allowsEditing = true que ya causa el problema que no he podido resolver hasta ahora: el toque (casilla) del control deslizante izquierdo está "apagado" . Ya que es una descripción bastante vaga, cargué un video y puede encontrarlo aquí .

Desafortunadamente, no tengo la menor idea de lo que engendra el problema y realmente agradecería algo de ayuda con esto. Le pregunté al creador de FDTake pero aparentemente piensa que Apple necesita arreglar esto (como podrás ver en uno de los últimos problemas cerrados).

¿Alguien puede explicar cómo puedo solucionar esto y qué lo está causando?


Hemos tenido el mismo problema aquí. Ciertamente tiene que ver con gestos en el lado izquierdo de la pantalla.

Cuando agrega additionalSafeAreaInsets a su UIImagePickerController , funciona mucho mejor.

Esto es lo que intentamos:

let imagePickerController = UIImagePickerController() imagePickerController.allowsEditing = true imagePickerController.mediaTypes = [kUTTypeMovie as String] imagePickerController.videoMaximumDuration = 12.0 imagePickerController.additionalSafeAreaInsets = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)

Terminamos usando el UIVideoEditorController .


Una posible solución: seleccione el video y luego PryntTrimmerView con PryntTrimmerView

Puede usar la biblioteca PryntTrimmerView para recortar los videos. He implementado esta biblioteca en un proyecto de ejemplo. Puede descargar el proyecto de muestra en ejecución desde mi repositorio github Here

El botón de carga aleatoria de video carga un video aleatorio desde el almacenamiento del dispositivo (fotos). Por lo tanto, al menos un archivo de video debe estar presente

Se está utilizando un Avplayer para mostrar el video.

Este es un video completo

Usa los tiradores negros para recortar el video como desees

Recortar el video

Nota: La distancia mínima permitida entre los identificadores se especifica en el archivo PryntTrimmerView.swift utilizando una propiedad privada.

/// The minimum duration allowed for the trimming. The handles won''t pan further if the minimum duration is attained. public var minDuration: Double = 2

Y esta función utiliza esta propiedad junto con la duración del video y el cuadro para calcular las manijas de bw de la distancia mínima

private var minimumDistanceBetweenHandle: CGFloat { guard let asset = asset else { return 0 } let distance = CGFloat(minDuration) * assetPreview.contentView.frame.width / CGFloat(asset.duration.seconds) print("minimum distance: /(distance)") return distance }

Avísame si encuentras algún problema o necesitas más información.

Gracias