AVCaptureVideoPreviewLayer (camera preview) freezes/stuck after moving to background and back

后端 未结 6 654
忘了有多久
忘了有多久 2020-12-15 20:38

Cant figure this one out. Everything works fine when the app is active, and than sometimes when i move the app to the background(pressing the home button) a

6条回答
  •  别那么骄傲
    2020-12-15 21:01

    Swift 4 Solution

    You have to delete the camera input when the user enters the background, then restore it when they return. Take a look at this code:

    override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
             createCameraPreview() //Call the setup of the camera here so that if the user enters the view controller from another view controller, the camera is established. 
             notificationCenter() //Call the notification center function to determine when the user enters and leaves the background. 
        }
    
    
    
     func notificationCenter() {
                NotificationCenter.default.addObserver(self, selector: #selector(willResignActive), name: .UIApplicationWillResignActive , object: nil)
                    NotificationCenter.default.addObserver(self, selector: #selector(openedAgain), name: .UIApplicationDidBecomeActive, object: nil)
            }
    
     @objc func openedAgain() {
         createCameraPreview() // This is your function that contains the setup for your camera. 
        }
    
        @objc func willResignActive() {
            print("Entered background")
            let inputs = captureSession!.inputs
            for oldInput:AVCaptureInput in inputs {
                captureSession?.removeInput(oldInput)
            }
        }
    

    Swift 4.2:

       override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
                setupCamera()
                //createCameraPreview() //Call the setup of the camera here so that if the user enters the view controller from another view controller, the camera is established.
                notificationCenter() //Call the notification center function to determine when the user enters and leaves the background.
        }
    
    
    
        func notificationCenter() {
            NotificationCenter.default.addObserver(self, selector: #selector(willResignActive), name: UIApplication.willResignActiveNotification , object: nil)
            NotificationCenter.default.addObserver(self, selector: #selector(openedAgain), name: UIApplication.didBecomeActiveNotification, object: nil)
        }
    
        @objc func openedAgain() {
            setupCamera() //This is your function that contains the setup for your camera.
        }
    
        @objc func willResignActive() {
            print("Entered background")
            let inputs = captureSession.inputs
            for oldInput:AVCaptureInput in inputs {
                captureSession.removeInput(oldInput)
            }
        }
    

提交回复
热议问题