Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> iOS

วิธีใช้กล้องหน้า (Front Camera) ใน Swift

ใช้ AVFoundation เพื่อเข้าถึงกล้องหน้า ตรวจสอบว่ามีกล้องหน้าหรือไม่

โค้ดตรวจสอบและเข้าถึงกล้องหน้า

import AVFoundation

func getFrontCamera() -> AVCaptureDevice? {
    let devices = AVCaptureDevice.DiscoverySession(
        deviceTypes: [.builtInWideAngleCamera],
        mediaType: .video,
        position: .front
    ).devices
    
    return devices.first
}

// ใช้งาน
guard let frontCamera = getFrontCamera() else {
    fatalError("Front camera not found")
}

// สร้าง Input สำหรับ Session
do {
    let input = try AVCaptureDeviceInput(device: frontCamera)
    captureSession.addInput(input)
} catch {
    print("Error: \(error)")
}

วิธีเก่า (Deprecated)

// ไม่แนะนำใช้ใน iOS 10+
AVCaptureDevice.devices().filter { $0.position == .front }.first

การตั้งค่า Info.plist

ต้องเพิ่ม Key: NSCameraUsageDescription พร้อมคำอธิบาย

หมายเหตุสำคัญ

  • ไม่ทำงานบน Simulator ต้องทดสอบบนอุปกรณ์จริง
  • ใช้ AVCaptureDevice.DiscoverySession แทน AVCaptureDevice.devices() (Deprecated)
  • ขอ Permission ก่อนใช้งาน: AVCaptureDevice.requestAccess(for: .video)

ตัวอย่างเต็ม: Preview กล้องหน้า

class CameraViewController: UIViewController {
    var captureSession = AVCaptureSession()
    var previewLayer: AVCaptureVideoPreviewLayer!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setupCamera()
    }
    
    func setupCamera() {
        guard let frontCamera = getFrontCamera(),
              let input = try? AVCaptureDeviceInput(device: frontCamera) else { return }
        
        captureSession.addInput(input)
        
        previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
        previewLayer.videoGravity = .resizeAspectFill
        previewLayer.frame = view.bounds
        view.layer.addSublayer(previewLayer)
        
        DispatchQueue.global(qos: .userInitiated).async {
            self.captureSession.startRunning()
        }
    }
}