Skip to content

Instantly share code, notes, and snippets.

@chansuke
Created October 6, 2015 04:47
Show Gist options
  • Save chansuke/f0ab88ec6c3960b2af18 to your computer and use it in GitHub Desktop.
Save chansuke/f0ab88ec6c3960b2af18 to your computer and use it in GitHub Desktop.
Swiftカメラサンプル
import UIKit
import AVFoundation
class MSCameraViewController: UIViewController ,AVCaptureMetadataOutputObjectsDelegate {
var input:AVCaptureDeviceInput!
var output:AVCaptureStillImageOutput!
var session:AVCaptureSession!
var camera:AVCaptureDevice!
var cameraPosition:NSInteger! // 0 = back, 1 = front
var previewLayer:AVCaptureVideoPreviewLayer!
let x: CGFloat = 0
let y: CGFloat = 0
let width: CGFloat = 350
let height: CGFloat = 350
//var resizedImage: UIImage?
@IBOutlet weak var previewView: UIView!
@IBOutlet weak var timer: UILabel!
@IBOutlet weak var switchCamera: UIView!
@IBAction func buttonSwitch(sender:AnyObject) {
if self.cameraPosition == 0 {
self.cameraPosition = 1
}
else {
self.cameraPosition = 0
}
stopCamera()
setupCamera()
}
var count = 60
override func viewDidLoad() {
super.viewDidLoad()
self.cameraPosition = 0;
setupDisplay()
//previewViewのみautolayoutを解除
view.translatesAutoresizingMaskIntoConstraints = true
//previewViewのサイズを変更
//CGRectMake(x,y,width,height)を定数で持たせる
previewView.frame = CGRectMake(x, y, width, height)
//UIGraphicsBeginImageContextWithOptions(previewView.frame.size, false, 0.0)
//let context = UIGraphicsGetCurrentContext();
//self.layer.renderInContext(context)
//let image = UIGraphicsGetImageFromCurrentImageContext();
//UIGraphicsEndImageContext();
setupCamera()
var timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
}
override func viewDidDisappear(animated: Bool) {
session.stopRunning()
for output in session.outputs {
session.removeOutput(output as? AVCaptureOutput)
}
for input in session.inputs {
session.removeInput(input as? AVCaptureInput)
}
session = nil
camera = nil
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func stopCamera() {
session.stopRunning()
for output in session.outputs {
session.removeOutput(output as? AVCaptureOutput)
}
for input in session.inputs {
session.removeInput(input as? AVCaptureInput)
}
session = nil
camera = nil
previewLayer.removeFromSuperlayer()
}
func setupDisplay() {
}
func setupCamera() {
session = AVCaptureSession()
for captureDevice: AnyObject in AVCaptureDevice.devices() {
if self.cameraPosition == 0 {
if captureDevice.position == AVCaptureDevicePosition.Back {
camera = captureDevice as? AVCaptureDevice
}
}
else {
if captureDevice.position == AVCaptureDevicePosition.Front {
camera = captureDevice as? AVCaptureDevice
}
}
}
input = try? AVCaptureDeviceInput(device: camera)
if session.canAddInput(input) {
session.addInput(input);
}
output = AVCaptureStillImageOutput();
if session.canAddOutput(output) {
session.addOutput(output);
}
let previewLayer : AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer.init(session: session)
// previewLayer.frame = self.view.bounds
// previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
previewLayer.frame = previewView.frame
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
previewView.layer.insertSublayer(previewLayer, atIndex: 0)
session.startRunning();
}
func update() {
if(count >= 0)
{
timer.text = String(count--)
}
}
func takeStillPicture() {
if var connection:AVCaptureConnection? = output.connectionWithMediaType(AVMediaTypeVideo) {
output.captureStillImageAsynchronouslyFromConnection(connection, completionHandler: { (imageDataBuffer, error) -> Void in
let imageData:NSData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataBuffer)
//previeViewと同じ大きさ
let image:UIImage = UIImage(data: imageData)!
let imageView = UIImageView(image: image)
imageView.contentMode = UIViewContentMode.ScaleAspectFill
imageView.clipsToBounds = true
//
/*
let resizedSize = CGSizeMake(350, 350)
UIGraphicsBeginImageContext(resizedSize)
image.drawInRect(CGRectMake(0, 0, resizedSize.height, resizedSize.width))
let resizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext()
//imageはUIImageのこと
UIImageWriteToSavedPhotosAlbum(resizedImage!, self, nil, nil)
*/
//self.performSegueWitdhIdentifier("ResultViewController", sender: nil)
self.performSegueWithIdentifier("ResultViewController", sender: imageView.image!)
})
}
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?){
let secondViewController:MSResultViewController = segue.destinationViewController as! MSResultViewController
//secondViewController.resultImageView?.image = self.resizedImage!
secondViewController.resultimg = sender as! UIImage
print("cont\(secondViewController.resultImageView)")
}
@IBAction func takePhoto(sender: AnyObject) {
takeStillPicture()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment