2016-09-17 2 views
1

AVFoundation 프레임 워크를 사용하여 사진을 찍어 앱에서 분석하려고합니다. 매초마다 자동으로 사진을 찍고 싶습니다. 어떻게해야합니까?AVFoundation 매초마다 사진 찍기 SWIFT

여기 현재 코드입니다. 지금은 capturePhoto()를 호출 할 때만 사진을 찍습니다.

func setupSession() { 
    session = AVCaptureSession() 
    session.sessionPreset = AVCaptureSessionPresetPhoto 

    let camera = AVCaptureDevice 
    .defaultDeviceWithMediaType(AVMediaTypeVideo) 

    do { input = try AVCaptureDeviceInput(device: camera) } catch { return } 

    output = AVCaptureStillImageOutput() 
    output.outputSettings = [ AVVideoCodecKey: AVVideoCodecJPEG ] 

    guard session.canAddInput(input) 
    && session.canAddOutput(output) else { return } 

    session.addInput(input) 
    session.addOutput(output) 

    previewLayer = AVCaptureVideoPreviewLayer(session: session) 

    previewLayer!.videoGravity = AVLayerVideoGravityResizeAspect 
    previewLayer!.connection?.videoOrientation = .Portrait 

    view.layer.addSublayer(previewLayer!) 

    session.startRunning() 
} 

func capturePhoto() { 
    guard let connection = output.connectionWithMediaType(AVMediaTypeVideo) else { return } 
    connection.videoOrientation = .Portrait 

    output.captureStillImageAsynchronouslyFromConnection(connection) { (sampleBuffer, error) in 
    guard sampleBuffer != nil && error == nil else { return } 

    let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer) 
    guard let image = UIImage(data: imageData) else { return } 

    //do stuff with image 

    } 
} 

어떻게 변경해야합니까?

답변

1

그래서 한 번 두 번째를 발생 NSTimer를 작성하고, 그 NSTimer의 메소드 호출 capturePhoto에 :

var cameraTimer = NSTimer.scheduledTimerWithTimeInterval(1.0, 
    target: self, 
    #selector(timerCalled(_:), 
    userInfo: nil, 
    repeats: true) 

귀하의 timerCalled 기능은 다음과 같습니다

초에 한번씩 발생시키는 타이머를 만듭니다

func timerCalled(timer: NSTimer) { 
    capturePhoto() 
} 
+0

타이머를 멤버 변수로 만들고 viewDidAppear에서 timerCalled를 호출해야합니까? – mawnch

+0

예, 타이머 변수를 멤버 변수로 만들고 viewDidAppear에 타이머를 만듭니다. 그런 다음'viewWillDisappear'에서'timer.invalidate()'를 호출 할 것입니다. –