Để hiển thị preview camera trực tiếp lên UIView, có 2 cách: dùng AVFoundation (tùy chỉnh cao) hoặc UIImagePickerController (đơn giản, phù hợp preview đơn giản). Bài này dùng UIImagePickerController.
Các bước
- Tạo
UIImagePickerControllerobject. - Class conform
UIImagePickerControllerDelegate&UINavigationControllerDelegate. - Gán delegate, set sourceType = .camera.
- Add picker làm child view controller, add picker.view làm subview của UIView đích.
Code hoàn chỉnh
override func viewDidLoad() {
super.viewDidLoad()
let imagePicker = UIImagePickerController()
if UIImagePickerController.isCameraDeviceAvailable(.front) {
imagePicker.delegate = self
imagePicker.sourceType = .camera
imagePicker.cameraDevice = .front // hoặc .rear
imagePicker.allowsEditing = false
imagePicker.showsCameraControls = false // Ẩn UI mặc định
addChild(imagePicker)
view.addSubview(imagePicker.view)
imagePicker.view.frame = view.bounds
imagePicker.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
imagePicker.didMove(toParent: self)
}
}
Kết quả trên iPhone 7+

Lưu ý quan trọng
- Không chạy được trên Simulator (không có camera).
- Cần thêm
NSCameraUsageDescriptionvào Info.plist. showsCameraControls = falseđể ẩn UI mặc định (nút chụp, chuyển camera...), tự custom UI.- Để tùy chỉnh nâng cao (focus, exposure, zoom, format video, metadata) – dùng AVFoundation (AVCaptureSession, AVCaptureDeviceInput, AVCaptureVideoPreviewLayer).
- Nhớ gọi
imagePicker.didMove(toParent: self)sau khi addChild.