ใช้ 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()
}
}
}