Я создавал свой пользовательский вид камеры с помощью быстрых 3 и xcode.Плавный переход при переключении камер в пользовательскую камеру swift + xcode
У меня есть это, чтобы работать, но я столкнулся с небольшой проблемой. Чтобы переключить камеру с передней/задней стороны, я прекращаю сеанс, удаляю слой предварительного просмотра видео из представления, а затем создаю новый сеанс и добавляем новый слой предварительного просмотра видео с передней камеры. Это приводит к появлению новой камеры с рывком. Я хочу плавный переход между устройствами камеры. Как я могу это сделать?
Вот мой код для загрузки камеры:
func loadCamera()
{
session?.stopRunning()
videoPreviewLayer?.removeFromSuperlayer()
session = AVCaptureSession()
session!.sessionPreset = AVCaptureSessionPresetPhoto
var backCamera = AVCaptureDevice.defaultDevice(withDeviceType: .builtInWideAngleCamera, mediaType: AVMediaTypeVideo, position: .front)
if cameraPos == "back"
{
backCamera = AVCaptureDevice.defaultDevice(withDeviceType: .builtInWideAngleCamera, mediaType: AVMediaTypeVideo, position: .back)
}
var error: NSError?
var input: AVCaptureDeviceInput!
do {
input = try AVCaptureDeviceInput(device: backCamera)
} catch let error1 as NSError {
error = error1
input = nil
print(error!.localizedDescription)
}
if error == nil && session!.canAddInput(input) {
session!.addInput(input)
stillImageOutput = AVCapturePhotoOutput()
if session!.canAddOutput(stillImageOutput) {
session!.addOutput(stillImageOutput)
videoPreviewLayer = AVCaptureVideoPreviewLayer(session: session)
videoPreviewLayer?.frame = cameraView.bounds
videoPreviewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
videoPreviewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.portrait
cameraView.layer.addSublayer(videoPreviewLayer!)
session!.startRunning()
}
}
}
я называю это из viewWillAppear
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
loadCamera()
}
и я называю камеры загрузки, если пользователь нажимает на камеру изменения
@IBAction func changeCamera(_ sender: UIButton) {
if cameraPos == "back"
{cameraPos = "front"}
else
{cameraPos = "back"}
loadCamera()
}
пытался. все тот же – user2238284
вы можете использовать фоновые потоки также для выполнения некоторых обновлений uicomponents. – vaibhav
любое предложение или ссылку, на которую вы можете поделиться, я могу посмотреть? – user2238284