- August 28, 2025
- Mins Read
If you want to have a custom camera using SwiftUI and not using the UIPickerController that will display the original iOS camera, but don’t have time to play with AVFoundation, this package is for you!
SwiftUICam gives you a realtime full screen Snapchat-style view of the iPhone camera. Then, it is your job to built the interface you want and to connect it to the Camera View.
| SwiftUICam | |
|---|---|
| 😎 | Snapchat-style media capture |
| 📷 | Image capture |
| 🎥 | Video capture |
| 🎉 | Front and rear camera support |
| 🔦 | Front and rear flash |
| ☀️ | Retina flash support |
| 🔎 | Supports manual zoom |
| 🔒 | Supports manual focus |
iOS 13.0+
It’s inspired by the project SwiftyCam made for UIKit: https://github.com/Awalz/SwiftyCam
This software is released under the MIT License, see LICENSE.txt.
SwiftUICam is available through SPM. To install it, go to File -> Swift Packages -> Add Package Dependency
And enter
https://github.com/pierreveron/SwiftUICam
As the url.
Simply copy the contents of the Source folder into your project.
As of iOS 10, Apple requires the additon of the NSCameraUsageDescription and NSMicrophoneUsageDescription strings to the info.plist of your application. Example:
<key>NSCameraUsageDescription</key>
<string>To Take Photos and Video</string>
<key>NSMicrophoneUsageDescription</key>
<string>To Record Audio With Video</string>
In your SwiftUI view simply add the CameraView, pass it the applicationName and add an @ObservedObject UserEvents that will be pass to the interface and the CameraViewRepresentable like this:
import SwiftUI
import SwiftUICam
struct ContentView: View {
@ObservedObject events = UserEvents()
var body: some View {
ZStack {
CameraView(events: events, applicationName: “SwiftUICam”)
CameraInterfaceView(events: events)
} } }
Make your interface view conform to the CameraActions protocol and add the @ObservedObject UserEvents property. Add gestures to your buttons that call the CameraActions functions and pass them the UserEvents property, simply as that.
import SwiftUI
import SwiftUICam
struct CameraInterfaceView: View, CameraActions {
@ObservedObject var events: UserEvents
var body: some View {
VStack {
HStack {
rotateButton().onTapGesture {
self.rotateCamera(events: events)
}
Spacer()
flashButton().onTapGesture {
self.changeFlashMode(events: events)
}
}
Spacer()
captureButton().onTapGesture {
self.takePhoto(events: events)
}
}
}
}
It is the protocol that order the camera to take a picture or change the flash mode. List of the methods:
func takePhoto(events: UserEvents)
func toggleVideoRecording(events: UserEvents)
func rotateCamera(events: UserEvents)
func changeFlashMode(events: UserEvents)
The methods have a default definition to take make it easy to use.
You can modify several properties of the CameraView on its initialization:
init(events: UserEvents, applicationName: String, preferredStartingCameraType: AVCaptureDevice.DeviceType = .builtInWideAngleCamera, preferredStartingCameraPosition: AVCaptureDevice.Position = .back, focusImage: String? = nil, pinchToZoom: Bool = true, tapToFocus: Bool = true, doubleTapCameraSwitch: Bool = true)
By default, CameraView will launch to the back wide angle camera if it is available. This can be changed by changing the preferredStartingCameraType and the preferredStartingCameraPositionproperties to your desired ones.
CameraView, by default, support tap to focus on the video preview. To disable this feature, pass to the tapToFocus property false.
When tapToFocus is enable, you can pass an UIImage that will be animate on the tap point.
CameraView, by default, support pinchToZoom on the front and back camera. The gestures work similar to the default iOS app and will zoom to the maximum supported zoom level. To disable this feature, pass to the pinchToZoom property false.
CameraView, by default, support double tap to switch camera. To disable this feature, pass to the doubleTapCameraSwitch property false.
This package provides you with an easy way to show tooltips over any SwiftUI view, since Apple does not provide ...
SimpleToast is a simple, lightweight, flexible and easy to use library to show toasts / popup notifications inside iOS or ...
Create Toast Views with Minimal Effort in SwiftUI Using SSToastMessage. SSToastMessage enables you to effortlessly add toast notifications, alerts, and ...