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

ถ่ายภาพจากกล้อง iOS ด้วย Swift

ใช้ UIImagePickerController (ง่าย) แทน AVFoundation (ซับซ้อน) สำหรับถ่ายภาพและแสดงผล

ขั้นตอนการทำ

  1. เพิ่ม UIImageView ใน Storyboard → เชื่อม IBOutlet
  2. Conform Protocol: UIImagePickerControllerDelegate, UINavigationControllerDelegate
  3. เพิ่ม Tap Gesture หรือ Button เรียกกล้อง
  4. Implement Delegate Method

โค้ดเต็ม


import UIKit

class ViewController: UIViewController, 
    UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    
    @IBOutlet weak var imageView: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Tap to open camera
        let tap = UITapGestureRecognizer(target: self, action: #selector(openCamera))
        view.addGestureRecognizer(tap)
        view.isUserInteractionEnabled = true
    }
    
    @objc func openCamera() {
        guard UIImagePickerController.isSourceTypeAvailable(.camera) else {
            print("Camera not available")
            return
        }
        
        let picker = UIImagePickerController()
        picker.sourceType = .camera
        picker.cameraDevice = .rear // .front สำหรับกล้องหน้า
        picker.allowsEditing = true // อนุญาต Edit/Crop
        picker.delegate = self
        present(picker, animated: true)
    }
    
    // Delegate: User ถ่ายรูปเสร็จ
    func imagePickerController(_ picker: UIImagePickerController, 
                                didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
        
        // ใช้ editedImage ถ้า allowsEditing = true
        let image = (info[.editedImage] ?? info[.originalImage]) as? UIImage
        imageView.image = image
        imageView.contentMode = .scaleAspectFill
        imageView.clipsToBounds = true
        
        picker.dismiss(animated: true)
    }
    
    // Delegate: User ยกเลิก
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true)
    }
}

Info.plist (จำเป็น)


<key>NSCameraUsageDescription</key>
<string>แอปต้องการเข้าถึงกล้องเพื่อถ่ายภาพ</string>

UIImagePickerController vs AVFoundation

คุณสมบัติUIImagePickerControllerAVFoundation
ความซับซ้อนต่ำสูง
UI Built-inมี (Controls, Preview, Edit)ต้องสร้างเอง
Customizationจำกัดเต็มรูปแบบ
Performanceดีดีกว่า (Low latency)
เหมาะสำหรับถ่ายภาพ/วิดีโอ ธรรมดาAR, Custom Camera, Real-time Filter

หมายเหตุ

  • ไม่ทำงานบน Simulator ต้องทดสอบบน Device จริง
  • allowsEditing = true ให้ User Crop/Rotate ได้
  • ภาพที่ได้เป็น UIImage สามารถ Save, Upload, Process ต่อได้