Photothèque avec Swift UI

Affichez votre photothèque dans l'interface utilisateur Swift

Appuyez sur le bouton pour afficher la photothèque. Sélectionnez une photo dans la photothèque pour l'afficher en plein écran.

environnement

Swift 5.3 Xcode 12.0.1 macOS 10.15.7

galerie de photos

Définit une structure qui enveloppe la photothèque dans SwiftUI.

ImagePicker.swift


import SwiftUI

struct ImagePicker: UIViewControllerRepresentable {
    var sourceType: UIImagePickerController.SourceType = .photoLibrary
    
    func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIImagePickerController {
        let imagePicker = UIImagePickerController()
        imagePicker.allowsEditing = false
        imagePicker.sourceType = sourceType
        return imagePicker
    }
    
    func updateUIViewController(_ uiViewController: UIImagePickerController, context: UIViewControllerRepresentableContext<ImagePicker>) {

    }
}

Premier écran

Il s'agit de la structure d'écran de base de l'application. Affiche la photothèque au format feuille en fonction des variables d'état.

ContentView.swift


import SwiftUI

struct ContentView: View {
    @State private var image = UIImage()
    @State private var isShowPhotoLibrary = false
    
    var body: some View {
        VStack {
            Image(uiImage: self.image)
            Button(action: {
                self.isShowPhotoLibrary = true
            }, label: {
                Text("Photo Library")
                    .padding()
            })
        }
        .sheet(isPresented: $isShowPhotoLibrary, content: {
            ImagePicker(sourceType: .photoLibrary)
        })
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

Sélectionnez une photo dans votre photothèque

«Respectez le protocole UIImagePickerControllerDelegate».

ImagePicker.swift


import SwiftUI

struct ImagePicker: UIViewControllerRepresentable {
    // MARK: - Working with UIViewControllerRepresentable
    var sourceType: UIImagePickerController.SourceType = .photoLibrary
    
    func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIImagePickerController {
        let imagePicker = UIImagePickerController()
        imagePicker.allowsEditing = false
        imagePicker.sourceType = sourceType
        imagePicker.delegate = context.coordinator  // Coordinater to adopt UIImagePickerControllerDelegate Protcol.
        return imagePicker
    }
    
    func updateUIViewController(_ uiViewController: UIImagePickerController, context: UIViewControllerRepresentableContext<ImagePicker>) {

    }

    // MARK: - Using Coordinator to Adopt the UIImagePickerControllerDelegate Protocol
    @Binding var selectedImage: UIImage
    @Environment(\.presentationMode) private var presentationMode
    
    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }
    
    final class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
        var parent: ImagePicker
        
        init(_ parent: ImagePicker) {
            self.parent = parent
        }
     
        func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
     
            if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
                parent.selectedImage = image
            }
     
            parent.presentationMode.wrappedValue.dismiss()
        }
    }
}

Afficher les photos sélectionnées

ʻAjoutez un modificateur à la vue Image. Réglez la photo sélectionnée sur la propriété ʻimage au moment de la transition d'écran.

ContentView.swift


struct ContentView: View {
    @State private var image = UIImage()
    @State private var isShowPhotoLibrary = false
    
    var body: some View {
        VStack {
            Image(uiImage: self.image)
                .resizable()
                .scaledToFill()
                .frame(minWidth: 0, maxWidth: .infinity)
                .edgesIgnoringSafeArea(.all)
            Button(action: {
                self.isShowPhotoLibrary = true
            }, label: {
                Text("Photo Library")
                    .padding()
            })
        }
        .sheet(isPresented: $isShowPhotoLibrary, content: {
            ImagePicker(sourceType: .photoLibrary, selectedImage: self.$image)
        })
    }
}

Recommended Posts

Photothèque avec Swift UI
Implémentation des menus latéraux dans Swift UI
Swift UI 100 coups
Personnaliser la vue avec le modificateur de vue dans l'interface utilisateur Swift
Mémo d'implémentation SKStoreReviewController dans l'interface utilisateur Swift d'iOS14
Divide devient 0 dans Swift
À partir de Swift Swift UI
Tableau multidimensionnel dans Swift
Liste des appareils pouvant être prévisualisés avec Swift UI
Comment changer la couleur d'arrière-plan de la barre de navigation, etc. dans Swift UI
Créer un compteur FPS avec Swift
Méthode de redimensionnement automatique des photos par Java
[React Native] Ecrire un module natif dans Swift
Spécifiez plusieurs conditions de tri dans Swift
Manipulez bien le caractère C ** avec Swift
Même avec Swift, horodatage en nanosecondes!
Essayez d'afficher une vue Web légèrement riche dans SwiftUI en utilisant UIViewRepresentable