1

카메라 응용 프로그램을 빌드하려고합니다. 나는 아이폰 OS에 새로운 오전, 나는, 문서화를 읽을 자습서를 지켜 쓴 다음과 같은 코드 :CapturePhoto가 신속하게 작동하지 않습니다. 3

import UIKit 
import AVFoundation 
class StartVC: UIViewController { 

var connection: AVCaptureConnection! 
var output: AVCapturePhotoOutput! 
var videoPreviewLayer: AVCaptureVideoPreviewLayer! 
@IBOutlet var videoPreviewView: UIView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.createCamera() 
} 

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

    self.videoPreviewLayer.bounds = self.videoPreviewView.bounds 
    self.videoPreviewLayer.position = CGPoint(x: self.videoPreviewView.bounds.midX, y: self.videoPreviewView.bounds.midY) 
} 

func createCamera() { 
    let captureSession = AVCaptureSession() 

    if captureSession.canSetSessionPreset(AVCaptureSessionPresetHigh) { 
     captureSession.sessionPreset = AVCaptureSessionPresetHigh 
    } else { 
     print("Error: Couldn't set preset = \(AVCaptureSessionPresetHigh)") 
     return 
    } 

    let cameraDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeVideo) 

    var error: NSError? 

    let inputDevice = try! AVCaptureDeviceInput.init(device: cameraDevice) 
    //let inputDevice = AVCaptureDeviceInput.withDevice(cameraDevice) as AVCaptureDeviceInput 
    if let error = error { 
     print("Error: \(error)") 
     return 
    } 

    if captureSession.canAddInput(inputDevice) { 
     captureSession.addInput(inputDevice) 
    } else { 
     print("Error: Couldn't add input device") 
     return 
    } 

    let imageOutput = AVCapturePhotoOutput() 
    if captureSession.canAddOutput(imageOutput) { 
     captureSession.addOutput(imageOutput) 
    } else { 
     print("Error: Couldn't add output") 
     return 
    } 

    // Store imageOutput. We will need it to take photo 
    self.output = imageOutput 

    let connection = imageOutput.connections.first as! AVCaptureConnection! 
    // Store this connection in property. We will need it when we take image. 
    self.connection = connection 
    connection?.videoOrientation = AVCaptureVideoOrientation.portrait 

    captureSession.startRunning() 

    // This will preview the camera 
    let videoLayer = AVCaptureVideoPreviewLayer(session: captureSession) 
    videoLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill 
    videoLayer?.contentsScale = UIScreen.main.scale 

    self.videoPreviewView.layer.addSublayer(videoLayer!) 

    // Store this layer instance in property. We will place it into a view 
    self.videoPreviewLayer = videoLayer 
} 



@IBAction func CaptureButton(_ sender: UIButton) { 

    let captureSettings = AVCapturePhotoSettings() 
    let previewPixelType = captureSettings.availablePreviewPhotoPixelFormatTypes.first! 
    let previewFormat = [kCVPixelBufferPixelFormatTypeKey as String: previewPixelType, 
         kCVPixelBufferWidthKey as String: 300, 
         kCVPixelBufferHeightKey as String: 300, 
         ] 
    captureSettings.previewPhotoFormat = previewFormat 

    self.output.capturePhoto(with: captureSettings, delegate: self as! AVCapturePhotoCaptureDelegate) 

} 

}

을하지만이 절에있는 오류를 얻고있다.

@IBAction func CaptureButton(_ sender: UIButton) { 

    let captureSettings = AVCapturePhotoSettings() 
    let previewPixelType = captureSettings.availablePreviewPhotoPixelFormatTypes.first! 
    let previewFormat = [kCVPixelBufferPixelFormatTypeKey as String: previewPixelType, 
         kCVPixelBufferWidthKey as String: 300, 
         kCVPixelBufferHeightKey as String: 300, 
         ] 
    captureSettings.previewPhotoFormat = previewFormat 

// For this line 
     self.output.capturePhoto(with: captureSettings, delegate: self as! AVCapturePhotoCaptureDelegate) 

    } 

오류는 나는이 문제를 해결할 수있는 방법 myViewControllerAVCapturePhotoCaptureDelegate

의 값을 캐스팅 수 없음을 말하고있다?

+1

보기 컨트롤러에 AVCapturePhotoCaptureDelegate를 구현하십시오. –

+0

클래스 StartVC : UIViewController

+0

위임을 구현하려고했지만 문제가 발생합니다. 제발 나를 위해 대리자 기능을 구현하시기 바랍니다 수 있습니까? – mumu

답변

0

:

이 오류는 다음과 같은 클래스 선언에 'AVCapturePhotoCaptureDelegate'를 추가하십시오 해결하기 또한로 작성했습니다

class StartVC: UIViewController,AVCapturePhotoCaptureDelegate { 


} 
+0

캐스팅하지 않으면 오류가 발생합니다. 확장 기능의 구현은 무엇입니까? – mumu

+0

"AVCapturePhotoCaptureDelegate"의 대리인 기능을 내선 번호 내에서 호출 할 수 있습니다. – Vishnu

1

이 코드는이 코드를 작성한 viewController에 AVCapturePhotoCaptureDelegate를 확인하지 않았기 때문에 발생합니다. 그것은 될 수

self.output.capturePhoto(with: captureSettings, delegate: self) 

캐스팅이

class StartVC: UIViewController { 
} 
extension StartVC: AVCapturePhotoCaptureDelegate{ 
} 

필요를 시도하지

class myViewController: UIViewController,AVCapturePhotoCaptureDelegate{ 


} 
0

info.plist에 "Privacy - Camera Usage Description"키를 추가하십시오. iOS 10 이상을 사용하는 경우

이 키는 Google 앱에서 카메라에 액세스하는 데 필요합니다.

관련 문제