2017-01-19 24 views
1

ios 10.2ですばやく3でSnapchatのようなカメラを作成しようとしましたが、問題はiPhoneでアプリを実行するときです。 UIViewが空に見えます。これは私のコードです。私のInfo.plistでカメラios 10.2、swift 3

import UIKit 
import AVFoundation 

class TakeSelfieViewController: UIViewController { 

@IBOutlet var cameraView: UIView! 

var captureSession : AVCaptureSession? 
var stillImageOutput: AVCaptureStillImageOutput? 
var previewLayer : AVCaptureVideoPreviewLayer? 

override func viewDidLoad() { 
    super.viewDidLoad() 

    captureSession = AVCaptureSession() 
    captureSession?.sessionPreset = AVCaptureSessionPreset1920x1080 
    let deviceDiscoverySession = AVCaptureDeviceDiscoverySession(deviceTypes: [AVCaptureDeviceType.builtInDuoCamera, AVCaptureDeviceType.builtInTelephotoCamera,AVCaptureDeviceType.builtInWideAngleCamera], mediaType: AVMediaTypeVideo, position: AVCaptureDevicePosition.front) 
    for device in (deviceDiscoverySession?.devices)! { 
     if device.position == AVCaptureDevicePosition.front{ 
      do { 
       let input = try AVCaptureDeviceInput(device: device) 
       if (captureSession?.canAddInput(input))!{ 
        captureSession?.addInput(input) 
        stillImageOutput = AVCaptureStillImageOutput() 
        stillImageOutput?.outputSettings = [AVVideoCodecKey:AVVideoCodecJPEG] 
        if (captureSession?.canAddOutput(stillImageOutput))! { 
         captureSession?.addOutput(stillImageOutput) 
         previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 
         previewLayer?.videoGravity = AVLayerVideoGravityResizeAspect 
         previewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.portrait 
         cameraView.layer.addSublayer(previewLayer!) 
         captureSession?.startRunning() 
        } 
       } 
      } catch{ 
       print("Error Occured when trying get camera") 
      } 
     } 
    } 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

override var prefersStatusBarHidden: Bool { 

    return true 

} 

私はプライバシーを追加している - カメラの使用説明

何が起こっていますか?

+0

説明を正しく追加しますか? – BilalReffas

+0

これを見てくださいhttp://stackoverflow.com/questions/37869963/how-to-use-avcapturephotooutput/38171414#38171414 – BilalReffas

+0

カメラマネージャーでカメラセッションを処理できる簡単なクラスがあります。あなたはそれにカメラのpreviewlayerを表示するビュー:https://github.com/maryamfekri/MFCameraManager –

答えて

0

ios 10以降でswift3コードを使って写真を撮るのはとても簡単ですここを見てくださいまず画像ピッカーを提示する必要があります.10以降ではカメラとライブラリの写真にアクセスする許可を得る必要があります。

あなたが得ることができます

  import UIKit 

     class ViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate { 

Info.plistファイルが 2.Privacy、カメラの使用アクセス

 func cameraAction(_ sender: AnyObject) { 
       if UIImagePickerController 
     .isSourceTypeAvailable(UIImagePickerControllerSourceType.camera){ 
     let imagePicker = UIImagePickerController() 
     imagePicker.delegate=self 
     imagePicker.sourceType = UIImagePickerControllerSourceType.camera 
     imagePicker.allowsEditing = true 
     self .present(imagePicker, animated: true, completion: nil) 
    } 

    } 
descriptinこれらの事1.Privacy - フォトライブラリの使用にアクセスし、あなたのクラスにこれらのdelgatesを追加することができます

ここではUIImageViewをベローズコードで見ることができますimageViewギャラリーやカメラから選択した画像を表示するのに使用します

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage{ 
     imageView.image = image 
     imageView.contentMode = .scaleAspectFit 
     self.dismiss(animated: true, completion: nil) 
    } 

} 

あなたの携帯電話のギャラリー

 func photosFromLibrary(_ sender: AnyObject) { 
    if UIImagePickerController .isSourceTypeAvailable(UIImagePickerControllerSourceType.photoLibrary){ 
     let imagePicker = UIImagePickerController() 
     imagePicker.delegate=self 
     imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary 
     imagePicker.allowsEditing = true 
     self .present(imagePicker, animated: true, completion: nil) 
    } 

} 
0

にあなたがpreviewLayerの枠を設定する必要がlibrarysから写真を取得することができます。

previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 
previewLayer?.frame = cameraView.frame // this line is new 
previewLayer?.videoGravity = AVLayerVideoGravityResizeAspect 
関連する問題