【问题标题】:How to freeze the view until a certain value is true?如何冻结视图直到某个值为真?
【发布时间】:2018-12-07 01:18:40
【问题描述】:

我有一个应用程序,用户可以在其中按住一个按钮来拍摄视频。但是,当他们这样做然后放手时,新图层和视频播放不会立即出现。取而代之的是一个非常短的延迟,在用户放开按钮后,您可以看到相机仍然显示相机看到的内容。当延迟结束时,视频会立即显示并开始播放。我怎样才能让视频的第一帧在它准备好播放之前出现,以便它在它开始播放之前只存在片刻?查看 snapchats 视频拍摄功能,了解我的意思

我相信解决这个问题的方法是立即在第一帧中添加子层,但是我无法找到我们究竟是如何做到这一点的

下面是我的代码:

        func fileOutput(_ output: AVCaptureFileOutput, didFinishRecordingTo outputFileURL: URL, from connections: [AVCaptureConnection], error: Error?) {

            if (error != nil) {
                print("Error recording movie11: \(error!.localizedDescription)")
            } else {
                newViewVideoPlayback()

                switchIcon.isHidden = true
                switchWhiteUI.isHidden = true
                switchCamButton.isHidden = true
                camWhiteLine.isHidden = true

                let videoRecorded = outputURL! as URL

                playerQueue = AVQueuePlayer(playerItem: AVPlayerItem(url: videoRecorded))
                self.playerQueue?.play()

                playerLayer = AVPlayerLayer(player: playerQueue)
                playerLayer.frame = (camPreview?.bounds)!
                playerLayer?.layoutIfNeeded()
                playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill

                camPreview?.layer.insertSublayer(playerLayer, above: previewLayer)

                playerItem1 = AVPlayerItem(url: videoRecorded)

                playerLooper = AVPlayerLooper(player: playerQueue, templateItem: playerItem1)

                if !captureSession.isRunning {
                    DispatchQueue.global(qos: .background).async {
                        self.startRunningCaptureSession()
                    }
                }
            }
        }


//Bellow is teh long tap method 
        @objc func longTap(_ sender: UIGestureRecognizer) {
        print("Long tap")

        self.numForVid = numForVid + 1 //shud change this number stuff
        print("\(numForVid)")

        cameraButton.isHidden = true

        if sender.state == .ended {
            print("UIGestureRecognizerStateEnded")
            //stopSession()
            stopRecording()
        }
        else if sender.state == .began {
            print("UIGestureRecognizerStateBegan.")
            //Do Whatever You want on Began of Gesture
            startCapture()
        }
    }

【问题讨论】:

    标签: ios iphone swift avfoundation


    【解决方案1】:

    在 stopRecording() 函数的末尾插入captureSession.stopRunning()

    【讨论】:

    • 这回答了问题,虽然它没有解决我的问题,所以我真正需要做的是让视频播放层冻结在第一帧,直到视频准备好播放
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多