我试着在iOS10.2中用swift 3创建一个类似Snapchat的摄像头,但问题是当我在iPhone中运行这个应用程序时。UIView显示为空。这是我的代码。
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中,我添加了隐私摄像头使用说明
发生什么事了呢?
发布于 2017-03-26 13:29:59
在iOS10和更高版本中使用swift3代码拍照非常容易,只需看这里,首先你需要展示picker.In iOS10版本的图像,你应该获得从库中访问相机和照片的许可。
您可以将这些delgate添加到您的类中
import UIKit
class ViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate {Info.plist文件您可以访问这些内容1.隐私-照片库使用描述2.隐私-相机使用访问
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,它用于显示你从图库或相机中选择的图像
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)
}
}发布于 2017-07-07 06:57:26
您需要设置previewLayer的框架。
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer?.frame = cameraView.frame // this line is new
previewLayer?.videoGravity = AVLayerVideoGravityResizeAspecthttps://stackoverflow.com/questions/41750796
复制相似问题