iOS Swift Camera AVFoundation
Swift and AVFoundation
We have choices to implement camera
Sample
Before staring, we need to link AVFoundation.framework
Sources
import UIKit import AVFoundation class ViewController: UIViewController { var imageOutput : AVCaptureStillImageOutput? // TODO var session: AVCaptureSession? override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = UIColor.whiteColor() // init camera device let captureDevice : AVCaptureDevice? = initCaptureDevice() // Prepare output initOutput() if (captureDevice != nil) { let deviceInput : AVCaptureInput? = initInputDevice(captureDevice!) if (deviceInput != nil) { initSession(deviceInput!) // Prepare preview size? let previewLayer: AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer(session: self.session) previewLayer.frame = self.view.bounds self.view.layer.addSublayer(previewLayer) self.session?.startRunning() } } else { print("Missing Camera") } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } override func viewWillLayoutSubviews() { // layout button etc... } private func initCaptureDevice() -> AVCaptureDevice? { var captureDevice: AVCaptureDevice? let devices: NSArray = AVCaptureDevice.devices() // Get Backcamera for device: AnyObject in devices { if device.position == AVCaptureDevicePosition.Back { captureDevice = device as? AVCaptureDevice } } return captureDevice } private func initInputDevice(captureDevice : AVCaptureDevice) -> AVCaptureInput? { var deviceInput : AVCaptureInput? do { deviceInput = try AVCaptureDeviceInput(device: captureDevice) } catch _ { deviceInput = nil } return deviceInput } private func initOutput() { self.imageOutput = AVCaptureStillImageOutput() } private func initSession(deviceInput: AVCaptureInput) { self.session = AVCaptureSession() self.session?.sessionPreset = AVCaptureSessionPresetPhoto self.session?.addInput(deviceInput) self.session?.addOutput(self.imageOutput!) // session preset // https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVCaptureSession_Class/index.html#//apple_ref/doc/constant_group/Video_Input_Presets } /* * Take Photo Helper */ private func takePhoto() { let videoConnection : AVCaptureConnection? = self.imageOutput?.connectionWithMediaType(AVMediaTypeVideo) if (videoConnection != nil) { self.imageOutput?.captureStillImageAsynchronouslyFromConnection(videoConnection, completionHandler: { (imageDataSampleBuffer, error) -> Void in if (imageDataSampleBuffer != nil) { // Capture data as jpeg format let imageData : NSData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataSampleBuffer) // Create UIImage from JPEG let image = UIImage(data: imageData) //UIImageWriteToSavedPhotosAlbum(image!, self, nil, nil) // TODO change size etc... } }) } } }