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) } } }
İlk Yorumu Siz Yapın