gpt4 book ai didi

ios - AVCapturePhotoOutput 没有成员 'captureStillImageAsynchronously'

转载 作者:搜寻专家 更新时间:2023-11-01 07:14:27 25 4
gpt4 key购买 nike

我正在制作一个自定义相机应用程序,我可以在其中通过 takePhoto 按钮拍摄我的照片,但是 takePhoto 中出现错误,提示 AVCapturePhotoOutput 没有成员“captureStillImageAsynchronously”。

View Controller

  import UIKit
import AVFoundation
import CoreImage

@available(iOS 10.0, *)
class ViewController: UIViewController {

var captureSession = AVCaptureSession()
var sessionOutput = AVCapturePhotoOutput()
var previewLayer = AVCaptureVideoPreviewLayer()


@IBOutlet weak var imageViewReal: UIImageView!
@IBOutlet weak var cameraView: UIView!

override func viewDidLoad() {
super.viewDidLoad()

}



override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

let deviceSession = AVCaptureDeviceDiscoverySession.init(deviceTypes: [.builtInDuoCamera, .builtInTelephotoCamera, .builtInWideAngleCamera], mediaType: AVMediaTypeVideo, position: .unspecified)

for device in (deviceSession?.devices)! {


if (device as AnyObject).position == AVCaptureDevicePosition.front {
do {
let input = try AVCaptureDeviceInput(device: device )

if captureSession.canAddInput(input) {
captureSession.addInput(input)

if captureSession.canAddOutput(sessionOutput){
captureSession.addOutput(sessionOutput)

previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
previewLayer.connection.videoOrientation = .portrait

cameraView.layer.addSublayer(previewLayer)
cameraView.addSubview(takePhoto)

previewLayer.position = CGPoint (x: self.imageViewReal.frame.width / 2, y: self.imageViewReal.frame.height / 2 )
previewLayer.bounds = imageViewReal.frame
captureSession.startRunning()

}
}
}
catch {
print("Error")
}
}
}
}


@IBAction func takePhoto(_ sender: Any) {
if let videoConnection = sessionOutput.connection(withMediaType: AVMediaTypeVideo) {
sessionOutput.captureStillImageAsynchronously(from: videoConnection, completionHandler: {
buffer, Error in
let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer)

UIImageWriteToSavedPhotosAlbum(UIImage(data : imageData!)!, nil, nil, nil)
})
}
}
}

最佳答案

如果您的应用兼容 iOS9,请使用 AVCaptureStillImageOutput 的方法:

func captureStillImageAsynchronously(from connection: AVCaptureConnection!, 
completionHandler handler: ((CMSampleBuffer?, Error?) -> Void)!)

如果你的app从iOS10开始,你应该使用AVCapturePhotoOutput的方法:

open func capturePhoto(with settings: AVCapturePhotoSettings, delegate: AVCapturePhotoCaptureDelegate)

所以,var sessionOutput = AVCapturePhotoOutput() 应该是 var sessionOutput = AVCaptureStillImageOutput()

试试吧。

关于ios - AVCapturePhotoOutput 没有成员 'captureStillImageAsynchronously',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43000307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com