A light weight & simple & easy camera for iOS by Swift.
Clone or download
Failed to load latest commit information.
DKCamera Swift 4.2 Sep 20, 2018
DKCameraDemo.xcodeproj Swift 4.2 Sep 20, 2018
DKCameraDemo Bumping version to 1.5.0 Sep 27, 2017
DKCameraDemoTests Add face recognition. Feb 22, 2017
.gitignore Initial commit Aug 30, 2015
.swift-version Swift 4 Sep 27, 2017
.travis.yml Update travis Sep 20, 2018
DKCamera.podspec Bumping version to 1.6.1 Sep 20, 2018
LICENSE Initial commit Aug 30, 2015
README.md Updated README. Sep 20, 2018
Screenshot1.png Update README Aug 31, 2015



Build Status Version Status license MIT Carthage compatible


A light weight & simple & easy camera for iOS by Swift. It uses CoreMotion framework to detect device orientation, so the screen-orientation lock will be ignored(Perfect orientation handling). And it has two other purposes:

  • Can be presenting or pushing or Integrating.
  • Suppressing the warning "Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates."(It seems a bug in iOS 8).
  • Compatible with iOS 11 and iPhone X


  • Xcode 9
  • Swift 3.2 & 4.2


iOS 8 and newer

DKCamera is available on CocoaPods. Simply add the following line to your podfile:

# For latest release in cocoapods
pod 'DKCamera'

iOS 7.x

Please use the 1.2.11 tag. To use Swift libraries on apps that support iOS 7, you must manually copy the files into your application project. CocoaPods only supports Swift on OS X 10.9 and newer, and iOS 8 and newer.

Easy to use

let camera = DKCamera()

camera.didCancel = {

	self.dismiss(animated: true, completion: nil)

camera.didFinishCapturingImage = { (image: UIImage?, metadata: [AnyHashable : Any]?) in
    self.dismiss(animated: true, completion: nil)
    self.imageView?.image = image

self.present(camera, animated: true, completion: nil)

You also can use these APIs:

open var cameraOverlayView: UIView?

/// The flashModel will to be remembered to next use.
open var flashMode:AVCaptureFlashMode!

open class func isAvailable() -> Bool

/// Determines whether or not the rotation is enabled.
open var allowsRotate = false

/// set to NO to hide all standard camera UI. default is YES.
open var showsCameraControls = true

open var defaultCaptureDevice = DKCameraDeviceSourceType.rear

/// Notify the listener of the detected faces in the preview frame.
open var onFaceDetection: ((_ faces: [AVMetadataFaceObject]) -> Void)?

If you are going to add a full-screen view as cameraOverlayView, maybe you should use the DKCameraPassthroughView or its subclass that have overriden the hitTest method in order to the event passes through to the expected view.

//  DKCamera.swift
public class DKCameraPassthroughView: UIView {
	public override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {
		let hitTestingView = super.hitTest(point, withEvent: event)
		return hitTestingView == self ? nil : hitTestingView


DKCamera is released under the MIT license. See LICENSE for details.