呼籲
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()
}
和我打電話負荷相機函數裏面viewDidAppear
而不是viewWillAppear
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(true)
loadCamera()
}
後臺線程:
DispatchQueue.global(qos: .background).async {
// perform ui updation and web related code
// background thread
DispatchQueue.main.async {
// main thread
}
}
嘗試。仍然是相同的 – user2238284
您可以使用後臺線程也執行一些uicomponents更新。 – vaibhav
任何建議或鏈接,你可以分享我可以看看? – user2238284