Дальность слайдера касания (поле) триммера видео "off"

Я использую FDTake (не обязательно будет слишком важно для этого вопроса, но все же), чтобы выбрать видео из фотографий, которое прекрасно работает. Тем не менее, я также хотел бы иметь возможность редактировать видео и ограничивать их длину примерно до 12 секунд. Для этого я просмотрел код модуля и изменил строку 271 на self.imagePicker.allowsEditing = true которая уже вызывает проблему, которую я не смог решить до сих пор: левый слайдер (поле) отключен,, Поскольку это довольно неопределенное описание, я загрузил видео, и вы можете найти его прямо здесь.

К сожалению, я абсолютно не знаю, что порождает проблему, и действительно будет очень полезно помочь с этим. Я спросил создателя FDTake, но, по-видимому, он считает, что Apple должна это исправить (так как вы сможете увидеть в одном из последних закрытых вопросов).

Может кто-нибудь объяснить, как я могу это исправить и что это вызывает?

Ответ 1

Одно из возможных решений: выберите видео, а затем обрезайте видео, используя PryntTrimmerView

Вы можете использовать библиотеку PryntTrimmerView для обрезки видео. Я реализовал эту библиотеку в образце проекта. Вы можете скачать раскрученный проект образца от моего GitHub репо здесь

Кнопка загрузки случайного видео загружает случайное видео из памяти устройства (фотографии). Поэтому, по крайней мере, один видеофайл должен присутствовать

Avplayer используется для отображения видео

Это полное видео

Complete video

Используйте черные ручки, чтобы обрезать видео по желанию

Обрезка видео

Trimming the video


Примечание: Минимальное PryntTrimmerView.swift расстояние между ручками указано в файле PryntTrimmerView.swift с использованием частного свойства.

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

И эта функция использует это свойство вместе с продолжительностью видео и рамкой для вычисления минимальных расстояний bw

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
  }

Сообщите мне, если у вас возникнут какие-либо проблемы или вам нужна дополнительная информация.

Спасибо

Ответ 2

Я воспроизвел проблему, используя UIImagePickerController напрямую.

Вот код, который вы можете вызвать из своего viewController:

 let picker = UIImagePickerController()
 picker.allowsEditing = true
 picker.mediaTypes = [String(kUTTypeMovie)]
 picker.videoMaximumDuration = 12.0

 present(picker, animated: true, completion: nil)

Я предполагаю, что существует конфликт жестов с некоторым внутренним представлением только в левой части экрана, как только вы вытащили левый дескрипт где-то посередине, вы можете получить к нему доступ напрямую.

Кроме того, это не кажется новым: IOS 11 UIImagepicker для видео, как переместить слайдер на дно?

Лучшее, что вы можете сделать, это сделать радар для Apple.

Тем временем вы можете использовать библиотеку, предложенную Awais Fayyaz, в качестве обходного пути. (Отказ от ответственности: я автор библиотеки, поэтому я, конечно, предубежден). Другим вариантом будет использование UIVideoEditorController после того, как пользователь выбрал видео, этот компонент не имеет проблемы в iOS 11.

Ответ 3

У нас была такая же проблема. Это, безусловно, связано с жестов в левой части экрана.

Когда вы добавляете additionalSafeAreaInsets в ваш UIImagePickerController он работает намного лучше.

Это то, что мы пробовали:

 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)

Мы закончили использование UIVideoEditorController.