2017-01-27 11 views
0

AVCaptureDevice.devicesはiOS 10で償却されるため、このサンプルコードをAVCaptureDeviceDiscoverySessionに調整しようとしています。AVCaptureDevice.devicesをAVCaptureDeviceDiscoverySessionに調整しました

var error: NSError? 
var captureSession: AVCaptureSession? 
var backVideoDevice: AVCaptureDevice? 
//let videoDevices = AVCaptureDevice.devices(withMediaType: AVMediaTypeVideo) // .devices DEPRECIATED 

//iOS 10 
let videoDevices = AVCaptureDeviceDiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaTypeVideo, position: .back) 

// Get back video device 
if let videoDevices = videoDevices 
{ 
    for captureDevice in videoDevices 
    { 
     if (captureDevice as AnyObject).position == AVCaptureDevicePosition.back 
     { 
      backVideoDevice = captureDevice as? AVCaptureDevice 
      break 
     } 
    } 
} 

そして、ここで私はこだわっていますが、エラーがポイントvideoDevicesで、このライン

for captureDevice in videoDevices 

で立ち上がると言う:タイプ「AVCaptureDeviceDiscoverySessionは、」プロトコル「配列」に準拠していません。

どこで見逃したり監督したりするのですか?どうも。

答えて

1

機能はタイプAVCaptureDeviceDiscoverySessionのオブジェクトを返し、あなたが期待していた配列を取得することのdevicesプロパティにアクセスする必要があります:あなたは、もはやとして、すべてのデバイス上でループする必要がある

let session = AVCaptureDeviceDiscoverySession.init(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaTypeVideo, position: .back) 
    if let device = session?.devices[0] { 
     backVideoDevice = device 
    } 

注意AVCaptureDeviceDiscoverySessionは、最初にposition.backの返品デバイスです。それらのうちの1つだけがあるので、あなたはdevices[0]にそれを見つけるでしょう。

関連する問題