首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >camera ios 10.2,swift 3

camera ios 10.2,swift 3
EN

Stack Overflow用户
提问于 2017-01-20 04:09:28
回答 2查看 1.6K关注 0票数 1

我试着在iOS10.2中用swift 3创建一个类似Snapchat的摄像头,但问题是当我在iPhone中运行这个应用程序时。UIView显示为空。这是我的代码。

代码语言:javascript
复制
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

}

在我的Info.plist中,我添加了隐私摄像头使用说明

发生什么事了呢?

EN

回答 2

Stack Overflow用户

发布于 2017-03-26 13:29:59

在iOS10和更高版本中使用swift3代码拍照非常容易,只需看这里,首先你需要展示picker.In iOS10版本的图像,你应该获得从库中访问相机和照片的许可。

您可以将这些delgate添加到您的类中

代码语言:javascript
复制
            import UIKit

         class ViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate {

Info.plist文件您可以访问这些内容1.隐私-照片库使用描述2.隐私-相机使用访问

代码语言:javascript
复制
        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)
    }

  }

在这里,你可以在下面的代码中使用UIImageView imageView,它用于显示你从图库或相机中选择的图像

代码语言:javascript
复制
  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)
    }

}

您可以从移动相册中的库中获取照片

代码语言:javascript
复制
       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
EN

Stack Overflow用户

发布于 2017-07-07 06:57:26

您需要设置previewLayer的框架。

代码语言:javascript
复制
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer?.frame = cameraView.frame // this line is new
previewLayer?.videoGravity = AVLayerVideoGravityResizeAspect
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41750796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档