How do I make the camera API more user-friendly?

CameraKit: Forbedr Din Apps Kamerafunktionalitet

23/02/2022

Rating: 3.98 (3425 votes)
Indholdsfortegnelse

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.

What is camerakit GitHub?
GitHub - CameraKit/camerakit-ios: Library for iOS Camera API. Massively increase performance and ease of use within your next iOS Project. Cannot retrieve latest commit at this time. CameraKit helps you add reliable camera to your app quickly.

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øgleBeskrivelse
NSCameraUsageDescriptionKræves for billed- og videooptagelse. En forklaring til brugeren, f.eks. "Denne app bruger kameraet til at tage billeder og videoer."
NSMicrophoneUsageDescriptionValgfrit, men anbefales hvis du optager video med lyd. En forklaring, f.eks. "Denne app bruger mikrofonen til at optage lyd til videoer."
NSPhotoLibraryAddUsageDescriptionValgfrit, 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.

What is camerakit GitHub?
GitHub - CameraKit/camerakit-ios: Library for iOS Camera API. Massively increase performance and ease of use within your next iOS Project. Cannot retrieve latest commit at this time. CameraKit helps you add reliable camera to your app quickly.

Avancerede Sessionsegenskaber og Metoder

CameraKit giver adgang til en række kraftfulde egenskaber og metoder til finjustering af kameraoplevelsen:

Egenskab/MetodeBeskrivelse
zoom: DoubleJusterer kameraets zoom-niveau.
resolution: CGSizeIndstiller opløsningen for billed- eller videooptagelse.
isRecording: BoolReturnerer sand, hvis en videooptagelse er i gang.
cameraPosition: CameraPositionAngiver hvilken kamera (front/bag) der skal bruges.
cameraDetection: CameraDetectionAktiverer funktioner som ansigtsdetektion.
flashMode: FlashModeKontrollerer 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.

Go up