Это можно сделать следующим образом.Установите эти свойства в viewController для хранения миниатюры первого кадра, когда начинается запись видео, и логического значения для сохранения, если захваченная фотография предназначена для миниатюры или обычного захвата фотографии одним нажатием:
private var isSettingThumbnail = false
private var thumbImage: UIImage?
иизменить реализацию цели распознавания жестов одним нажатием
@objc func normalTap(_ sender: UIGestureRecognizer) {
//self.numForPic = numForPic + 1
let settings = AVCapturePhotoSettings()
isSettingThumbnail = false
photoOutput?.capturePhoto(with: settings, delegate: self)
}
Вам также необходимо удалить слой предварительного просмотра, когда вы останавливаете запись, в противном случае захваченное изображение большого пальца не может быть отображено в ImageView.Здесь 10-секундная задержка просто для того, чтобы проверить, показывает ли изображение большого пальца.Только в целях отладки вы можете избавиться от него в любое время позже.
func stopRecording() {
if thumbImage != nil {
camPreview.image = thumbImage!
}
previewLayer?.removeFromSuperlayer()
DispatchQueue.main.asyncAfter(deadline: .now() + 10.0, execute: {
if self.movieOutput.isRecording == true {
self.movieOutput.stopRecording()
}
})
}
Теперь добавьте функцию делегата к AVCaptureFileOutputRecordingDelegate
, чтобы получить обратный вызов при начале записи.На этом этапе вы устанавливаете логический флаг.
func fileOutput(_ output: AVCaptureFileOutput, didStartRecordingTo fileURL: URL, from connections: [AVCaptureConnection]) {
isSettingThumbnail = true
photoOutput?.capturePhoto(with: AVCapturePhotoSettings(), delegate: self)
}
Теперь мы проверяем этот логический флаг и сохраняем и сохраняем уменьшенное изображение или обычное изображение.
extension ViewController: AVCapturePhotoCaptureDelegate {
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
print("you in this !")
if let imageData = photo.fileDataRepresentation() {
print("\(UIImage(data: imageData)) <-- image DALUE FEFE DEDE KEKE LALY")
if isSettingThumbnail {
thumbImage = UIImage(data: imageData)
} else {
image = UIImage(data: imageData)
}
print("\(image) <-- dada dudu creoo IMAGE valu")
}
}
}
Я проверил код и работает нормально.Кроме того, во время записи звук затвора не воспроизводится по умолчанию , и мы делаем снимок, когда запись началась, поэтому мы делаем это в соответствии с рекомендациями Apple.Согласно этому яблочному док.Это один из возможных способов сделать это.Также измените класс предварительного просмотра камеры на UIImageView
в раскадровке.Вы можете проверить рабочий код на github .Хорошего дня.Это был довольно интересный вопрос.:)