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:
- Hozzon létre egy példányt a
UIImagePickerController-ből. - Állítsa be a
sourceType-ját.photoLibrary-ra. - Adjon delegáltat a
UIImagePickerController-hez. A delegate-nek meg kell felelnie aUIImagePickerControllerDelegateésUINavigationControllerDelegateprotokolloknak. - Mutassa be a
UIImagePickerController-t. - 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 -->