23/02/2022
Introduktion til CameraKit
I en verden hvor mobilapps konstant stræber efter at tilbyde en rigere og mere engagerende brugeroplevelse, spiller kamerafunktionaliteten en afgørende rolle. Fra sociale medier til produktivitetsværktøjer, muligheden for at indfange og dele øjeblikke er essentiel. Men at implementere et robust og fleksibelt kamerasystem kan være en kompleks og tidskrævende opgave. Her kommer CameraKit ind i billedet.

CameraKit er en banebrydende open source kamera-platform designet til iOS-udviklere. Dens primære formål er at forenkle processen med at tilføje pålidelige og avancerede kamerafunktioner til enhver app. Med et fokus på konsistente resultater, skalerbarhed og uendelige muligheder, giver CameraKit udviklere værktøjerne til at skabe exceptionelle kameraoplevelser uden at skulle genopfinde hjulet. Dette framework er bygget til at være både kraftfuldt og brugervenligt, hvilket gør det til et ideelt valg for både erfarne udviklere og dem, der er nye inden for mobil kamera-udvikling.
Hvad Gør CameraKit Unikt?
CameraKit adskiller sig fra andre løsninger ved at tilbyde en omfattende pakke af funktioner, der er designet til at dække de fleste behov for kamera-integration. Lad os se på nogle af de mest fremtrædende egenskaber:
- Fleksibel Udvidelse: Mulighed for at udvide og skabe custom sessions, hvilket giver fuld kontrol over kameraets adfærd.
- Problemfri Optagelse: Både billed- og videooptagelse fungerer problemfrit med den samme preview-session.
- Automatisk Håndtering: Systemets tilladelser, preview-skalering og output-orientering håndteres automatisk, hvilket reducerer udviklingsbyrden.
- Tilpasselig Opløsning: Mulighed for at indstille en brugerdefineret opløsning for både billeder og videoer, inklusiv billedrate for video.
- Indbyggede Funktioner:
- Ansigtsdetektion
- Overlay grid
- Tap-to-focus
- Pinch-to-zoom
- Flash-kontrol (både for billeder og video)
- Skift af kamera-position
- Kompatibilitet: Fuldt Objective-C kompatibelt, hvilket sikrer bred anvendelse i eksisterende projekter.
Installation og Opsætning
At komme i gang med CameraKit er en ligetil proces. Frameworket kan nemt integreres i dit iOS-projekt ved hjælp af populære pakkehåndteringssystemer som CocoaPods eller Carthage.
Installation med CocoaPods
Hvis du ikke allerede har CocoaPods installeret, kan du gøre det ved at køre følgende kommando i din terminal:
sudo gem install cocoapods For at initialisere CocoaPods i dit projekt, hvis du ikke allerede har en Podfile, kan du køre:
pod init Åbn derefter din Podfile og tilføj følgende linje til din app-target:
pod "CameraKit-iOS" Dette vil automatisk integrere CameraKit i dit projekt og oprette en separat .xcworkspace-fil, som du fremover skal bruge i Xcode.
Installation med Carthage
Hvis du foretrækker Carthage, skal du først installere det (hvis du ikke allerede har det):
brew install carthage Opret derefter en Cartfile og tilføj følgende linje:
github "CameraKit/camerakit-ios" Kør derefter carthage update for at bygge frameworket og træk det ind i dit projekt.
Krav til Tilladelser (Info.plist)
Før du kan bruge kameraet, skal du sikre dig, at de nødvendige tilladelser er angivet i din app's Info.plist fil:
| Nøgle | Beskrivelse |
|---|---|
NSCameraUsageDescription | Kræves for billed- og videooptagelse. En forklaring til brugeren, f.eks. "Denne app bruger kameraet til at tage billeder og videoer." |
NSMicrophoneUsageDescription | Valgfrit, men anbefales hvis du optager video med lyd. En forklaring, f.eks. "Denne app bruger mikrofonen til at optage lyd til videoer." |
NSPhotoLibraryAddUsageDescription | Valgfrit, men nødvendigt hvis du vil gemme billeder/videoer i brugerens fotobibliotek. En forklaring, f.eks. "Denne app har brug for adgang til dit fotobibliotek for at gemme billeder." |
Grundlæggende Brug: Billed- og Videooptagelse
CameraKit gør det nemt at starte en kamera-session og vise en live preview.
Opsætning af en Kamera-session
Her er et simpelt kodeeksempel til at initialisere en foto-session og en preview-visning:
import CameraKit // ... i din ViewController eller ContentView ... override func viewDidLoad() { super.viewDidLoad() // Initialiser en foto-optagelsessession let session = CKFPhotoSession() // Brug CKFVideoSession til videooptagelse // let session = CKFVideoSession() let previewView = CKFPreviewView(frame: self.view.bounds) previewView.session = session self.view.addSubview(previewView) } Billedoptagelse
For at tage et billede med CKFPhotoSession:
session.capture { (image, settings) in // TODO: Tilføj din kode her til at håndtere det optagede billede } error: { (error) in // TODO: Håndter fejl her } Videooptagelse
For at starte og stoppe en videooptagelse med CKFVideoSession:
// Start optagelse (kan angive en brugerdefineret URL) session.record(url: URL(string: "")) { (url) in // TODO: Tilføj din kode her, f.eks. når optagelsen er gemt } error: { // TODO: Håndter fejl her } // Stop optagelse session.stopRecording() Du kan tjekke om en optagelse er i gang via egenskaben isRecording.

Avancerede Sessionsegenskaber og Metoder
CameraKit giver adgang til en række kraftfulde egenskaber og metoder til finjustering af kameraoplevelsen:
| Egenskab/Metode | Beskrivelse |
|---|---|
zoom: Double | Justerer kameraets zoom-niveau. |
resolution: CGSize | Indstiller opløsningen for billed- eller videooptagelse. |
isRecording: Bool | Returnerer sand, hvis en videooptagelse er i gang. |
cameraPosition: CameraPosition | Angiver hvilken kamera (front/bag) der skal bruges. |
cameraDetection: CameraDetection | Aktiverer funktioner som ansigtsdetektion. |
flashMode: FlashMode | Kontrollerer flash-tilstanden (auto, on, off). |
start() | Starter kamera-sessionen. |
stop() | Stopper kamera-sessionen. |
togglePosition() | Skifter mellem front- og bagkamera. |
focus(at point: CGPoint) | Fokuserer kameraet på et specifikt punkt. |
setWidth(_ width: Int, height: Int, frameRate: Int) | Indstiller specifikke dimensioner og billedrate for video. |
record(url: URL? = nil, _ callback: @escaping (URL) -> Void, error: @escaping (Error) -> Void) | Starter videooptagelse med en valgfri URL til lagring. |
capture(_ callback: @escaping (UIImage, AVCaptureResolvedPhotoSettings) -> Void, _ error: @escaping (Error) -> Void) | Starter billedoptagelse. |
stopRecording() | Stopper den igangværende videooptagelse. |
Integration med SwiftUI
Mens CameraKit primært er bygget med UIKit i tankerne, kan det problemfrit integreres med SwiftUI ved hjælp af UIViewRepresentable. Dette gør det muligt at indlejre kamera-previewet og styre funktioner som flash, fokus og zoom direkte fra SwiftUI-views.
En typisk implementering involverer at skabe en CameraManager, der håndterer AVCaptureSession, og en CameraPreview der bruger UIViewRepresentable til at vise preview-laget. En CameraViewModel kan derefter bruges til at orkestrere kommunikationen mellem viewet og manageren, håndtere tilladelser og udstille nødvendige funktioner til UI'en.
Eksempel på SwiftUI Integration
Her er et overblik over, hvordan en CameraPreview kunne se ud i SwiftUI:
import SwiftUI import AVFoundation struct CameraPreview: UIViewRepresentable { let session: AVCaptureSession func makeUIView(context: Context) -> VideoPreviewView { let view = VideoPreviewView() view.backgroundColor = .black view.videoPreviewLayer.session = session view.videoPreviewLayer.videoGravity = .resizeAspect view.videoPreviewLayer.connection?.videoOrientation = .portrait return view } func updateUIView(_ uiView: VideoPreviewView, context: Context) { // Ingen opdateringer nødvendige i dette simple eksempel } class VideoPreviewView: UIView { override class var layerClass: AnyClass { AVCaptureVideoPreviewLayer.self } var videoPreviewLayer: AVCaptureVideoPreviewLayer { return layer as! AVCaptureVideoPreviewLayer } } } I din ContentView kan du derefter bruge denne CameraPreview:
struct ContentView: View { @StateObject var viewModel = CameraViewModel() var body: some View { ZStack { CameraPreview(session: viewModel.session) .ignoresSafeArea() VStack { // UI elementer som flash-knap, capture-knap, zoom-slider etc. Spacer() HStack { // ... andre knapper ... CaptureButton { viewModel.captureImage() } // ... andre knapper ... } .padding() } } .onAppear { viewModel.checkForDevicePermission() } } } Skræddersyede Kamera-sessions
For udviklere, der har brug for mere end de indbyggede sessioner, tillader CameraKit oprettelse af custom sessions. Dette gøres ved at udvide den basale CKFSession klasse. Du kan definere din egen logik for at tilføje inputs og outputs til sessionen, hvilket giver ultimativ kontrol over kameraets funktionalitet.
class MyCustomSession: CKFSession { override init() { super.init() do { // Tilføj input fra bagkameraet let deviceInput = try CKFSession.captureDeviceInput(type: .backCamera) self.session.addInput(deviceInput) } catch let error { print(error.localizedDescription) } // TODO: Tilføj yderligere konfiguration her } } Licens
CameraKit frigives under den meget permissive MIT License. Dette betyder, at du frit kan bruge, modificere og distribuere frameworket, selv til kommercielle formål, med meget få begrænsninger.
Konklusion
CameraKit tilbyder en kraftfuld og fleksibel løsning for udviklere, der ønsker at integrere avancerede kamerafunktioner i deres iOS-apps. Med sin omfattende funktionalitet, nemme installation og mulighed for tilpasning, reducerer det markant den tid og kompleksitet, der normalt er forbundet med kamera-udvikling. Uanset om du bygger en simpel fotodeling-app eller en kompleks medieoptagelsesplatform, er CameraKit et værdifuldt værktøj i din udviklingsværktøjskasse.
Ved at udnytte open source-naturen og det aktive community omkring CameraKit, kan du skabe innovative og engagerende kameraoplevelser for dine brugere.
Hvis du vil læse andre artikler, der ligner CameraKit: Forbedr Din Apps Kamerafunktionalitet, kan du besøge kategorien Teknologi.
