2016-10-20 4 views
11

Я следил за этим видео, чтобы создать пользовательский вид камеры. https://www.youtube.com/watch?v=w0O3ZGUS3pkSwift 3 - AVCapture пользовательский вид камеры

однако из-за прошивкой 10 и стремительные 3 изменений многие вещи не имеют отношения больше

следующий код, который я получил после изменения устаревшую функцию на новый ones..however нет никакой ошибки, но и не видя превью на UIView

import UIKit 
import AVFoundation 

class ViewController: UIViewController, AVCapturePhotoCaptureDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 
    @IBOutlet weak var cameraView: UIView! 
    var captureSession = AVCaptureSession(); 
    var sessionOutput = AVCapturePhotoOutput(); 
    var sessionOutputSetting = AVCapturePhotoSettings(format: [AVVideoCodecKey:AVVideoCodecJPEG]); 
    var previewLayer = AVCaptureVideoPreviewLayer(); 

    override func viewWillAppear(_ animated: Bool) { 
     let deviceDiscoverySession = AVCaptureDeviceDiscoverySession(deviceTypes: [AVCaptureDeviceType.builtInDuoCamera, AVCaptureDeviceType.builtInTelephotoCamera,AVCaptureDeviceType.builtInWideAngleCamera], mediaType: AVMediaTypeVideo, position: AVCaptureDevicePosition.unspecified) 
     for device in (deviceDiscoverySession?.devices)! { 
      if(device.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 = AVCaptureVideoOrientation.portrait; 
          cameraView.layer.addSublayer(previewLayer); 
         } 
        } 
       } 
       catch{ 
        print("exception!"); 
       } 
      } 
     } 
    } 

ответ

15

Вы забыли, чтобы начать сеанс:

captureSession.startRunning() 

и установить рамки для вашего previewLayer:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    previewLayer.frame = cameraView.bounds 
} 

P.S. Как только вы добавили свои входы и выходы сеанса, вы должны выйти из этого цикла.

+0

Должен ли он запускать один раз, несмотря на это? –

+1

Наверное, но это заставляет меня нервничать –

+1

Например, нет ли двух обратных камер на iPhone 7+? Это маловероятно, но вы можете получить неприятный сюрприз для будущего оборудования ... –

Смежные вопросы