İçeriğe geç

SwiftUI ile UIImagePickerController kullanımı

Merhabalar bu yazımda SwiftUI ile iOS uygulamalarınızda cihazın resim galerisine erişerek kullanmayı göstereceğim.

Bu işlem için UIKit ile birlikte UIImagePickerController veya Photos framework yardımı ile cihaz galerisine erişerek kullanım gerçekleştirebiliyoruz. Bizde SwiftUI ile bu işlemi gerçekleştirmek için UIViewControllerRepresentable kullanarak sayfamıza UIImagePickerController sınıfını bağlayacağız.

Bir önceki yazımda bahsettiğim örnekteki gibi işlemlerimizi gerçekleştireceğiz.

İlk önce ilgili ImagePicker sınıfımızı yazalım.

struct ImagePicker: UIViewControllerRepresentable {
    
    @Binding var isPresented:Bool
    @Binding var image:UIImage
    
    func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePicker>) -> UIViewController {
        let photoPicker = UIImagePickerController()
        photoPicker.delegate = context.coordinator
        return photoPicker
    }
    
    func makeCoordinator() -> ImagePicker.Coordinator {
        return Coordinator(picker: self)
    }
    
    class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
        
        let picker:ImagePicker
        
        init(picker: ImagePicker) {
            self.picker = picker
        }
        
        func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
            if let selectedImage = info[.originalImage] as? UIImage {
                self.picker.image = selectedImage
            }
            self.picker.isPresented = false
        }
        
        func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
            self.picker.isPresented = false
        }
    }
    
    func updateUIViewController(_ uiViewController: UIViewController, context: UIViewControllerRepresentableContext<ImagePicker>) {
        
    }
}

Sınıfın gerekli delegate işlemlerinden yararlanmak için Coordinator sınıfımızı yazmak ve erişmek zorundayız. Daha sonrasında ilgili değişkenlere elde ettiğimiz değerleri atayabiliriz.

struct ContentView:View {
    
    @State var isShowGalary:Bool = false
    @State var selectedImage = UIImage()
    
    var body: some View {
        VStack {
            Image(uiImage: selectedImage)
                .resizable()
                .scaledToFill()
                .frame(width: 200.0, height: 200.0)
                .clipShape(Circle())
                .overlay(Circle()
                .stroke(Color.black,lineWidth: 1))
                .cornerRadius(10)
                .shadow(color: Color.black, radius: 10, x: 1, y: 3)
                .padding(EdgeInsets(top: 0, leading: 0, bottom: 70, trailing: 0))
            Button(action: {
                self.isShowGalary.toggle()
            }) {
                Text("Select Image")
                    .frame(width: 110, height: 30, alignment: .center)
                    .foregroundColor(Color.white)
                    .padding()
            }.sheet(isPresented: $isShowGalary, content: {
                ImagePicker(isPresented: self.$isShowGalary, image: self.$selectedImage)
            })
                .background(Color.blue)
                .cornerRadius(10)
        }
    }
}

 

 

 

Tarih:SwiftUI

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Copyright © 2020 Kenan Atmaca