Sobes.tech
Junior

Hogyan szerezhetünk képet a galériából?

sobes.tech MI

Válasz az MI-től

Az iOS-en a galériából való kép beszerzéséhez a UIImagePickerController használható.

Fő lépések:

  1. Hozzon létre egy példányt a UIImagePickerController-ből.
  2. Állítsa be a sourceType-ját .photoLibrary-ra.
  3. Adjon delegáltat a UIImagePickerController-hez. A delegate-nek meg kell felelnie a UIImagePickerControllerDelegate és UINavigationControllerDelegate protokolloknak.
  4. Mutassa be a UIImagePickerController-t.
  5. A delegate metódusban imagePickerController(_:didFinishPickingMediaWithInfo:) kezelje a kiválasztott képet.

Példa megvalósítás:

import UIKit
import PhotosUI // PHPickerViewController-hez iOS 14+ esetén

class YourViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    // MARK: - Fotókönyvtár megnyitása (Hagyományos)

    func openPhotoLibraryTraditional() {
        if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
            let imagePicker = UIImagePickerController()
            imagePicker.delegate = self
            imagePicker.sourceType = .photoLibrary
            imagePicker.allowsEditing = false // Állítsa true-ra, ha szerkesztésre van szükség
            self.present(imagePicker, animated: true, completion: nil)
        } else {
            // Kezelje az esetet, ha a fotókönyvtár nem elérhető
            print("Fotókönyvtár nem elérhető")
        }
    }

    // MARK: - Fotókönyvtár megnyitása (Modern - iOS 14+)

    @available(iOS 14, *)
    func openPhotoLibraryModern() {
        var config = PHPickerConfiguration()
        config.filter = .images // Csak képek kiválasztására
        config.selectionLimit = 1 // Kiválasztható elemek száma
        let picker = PHPickerViewController(configuration: config)
        picker.delegate = self // Delegate a PHPickerViewController-hez
        self.present(picker, animated: true, completion: nil)
    }

    // MARK: - UIImagePickerControllerDelegate metódusok

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let pickedImage = info[.originalImage] as? UIImage {
            // Itt használhatja a kiválasztott képet
            print("Kiválasztott kép: \(pickedImage.size)")
            // Például, hozzárendelheti egy UIImageView-hez vagy elmentheti
            // self.imageView.image = pickedImage
        }
        picker.dismiss(animated: true, completion: nil)
    }

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        picker.dismiss(animated: true, completion: nil)
    }

    // MARK: - PHPickerViewControllerDelegate (iOS 14+)

    @available(iOS 14, *)
    func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
        picker.dismiss(animated: true) // A kiválasztás függetlenül bezárja

        guard !results.isEmpty else {
            return // Semmi nincs kiválasztva
        }

        let itemProvider = results[0].itemProvider // Az első kiválasztott elem kezelése

        if itemProvider.canLoadObject(ofClass: UIImage.self) {
            itemProvider.loadObject(ofClass: UIImage.self) { (image, error) in
                if let error = error {
                    print("Hiba a kép betöltésekor: \(error.localizedDescription)")
                    return
                }
                if let selectedImage = image as? UIImage {
                    DispatchQueue.main.async {
                        // Itt használhatja a kiválasztott képet
                        print("Modern kiválasztott kép: \(selectedImage.size)")
                        // self.imageView.image = selectedImage
                    }
                }
            }
        }
    }
}

A PHPickerViewController (elérhető iOS 14-től) modernebb és preferált módszer, mivel nagyobb kontrollt biztosít a felhasználó választása és adatvédelme felett.

Ne felejtse el hozzáadni a fotókönyvtár használatának leírását az alkalmazás Info.plist fájljához:

<key>NSPhotoLibraryUsageDescription</key>
<string>Ez az alkalmazás hozzáférést kér a fotókönyvtáradhoz képek kiválasztásához.</string>

(az UIImagePickerController-hez)

<!-- A PHPickerViewController-hez nem szükséges külön hozzáférési kulcs -->