UIImagePicker не показывает раздел изображения, выбранный с помощью редактора - PullRequest
0 голосов
/ 16 июня 2020

Мне трудно отобразить изображение в моем imgaeview. Я включил редактирование, чтобы человек мог центрировать фотографию или использовать определенную часть фотографии. Когда я нажимаю «Выбрать», в представлении изображения этот раздел не отображается, а масштабируется вся фотография в соответствии с представлением изображения. Вот мой код.

    import UIKit
    import Firebase
    import SDWebImage
    import URLImage

class EPViewController: UIViewController {

@IBOutlet weak var ProfileImage: UIImageView!

    var database: Database!
    var storage: Storage!
    var selectedImage: UIImage?

    var ref:DatabaseReference?
    var databaseHandle:DatabaseHandle = 0

    let dbref = Database.database().reference()
    let uid = Auth.auth().currentUser?.uid



            override func viewDidLoad() {
                super.viewDidLoad()

                // Set the Firebase reference
                ref = Database.database().reference()

                //Retrieve the profile image



                ProfileImage.layer.borderWidth = 3.0
                ProfileImage.layer.masksToBounds = false
                ProfileImage.layer.borderColor = UIColor.white.cgColor
                ProfileImage.layer.cornerRadius = ProfileImage.frame.size.width / 2
                ProfileImage.clipsToBounds = true

                let tapGesture = UITapGestureRecognizer(target: self, action: #selector(EPViewController.handleSelectProfileImageView))
                ProfileImage.addGestureRecognizer(tapGesture)
                ProfileImage.isUserInteractionEnabled = true

               loadProfileImage()

                    }

    @objc func handleSelectProfileImageView() {

            let pickerController = UIImagePickerController()
            pickerController.delegate = self
            pickerController.allowsEditing = true
            present(pickerController, animated: true, completion: nil)

                        }


    @IBAction func Cancel(_ sender: UIBarButtonItem) {
        dismiss(animated: true, completion: nil)

    }

    let user = Auth.auth().currentUser

    let fileData = NSData()

    @IBAction func DoneButton(_ sender: UIBarButtonItem) {
    guard let imageSelected = self.ProfileImage.image else {
        print ("Avatar is nil")
        return
    }

        var dict: Dictionary<String, Any> = [
            "profileImageUrl": "",

        ]

    guard let imageData = imageSelected.jpegData(compressionQuality: 0.5) else {
        return
    }
        let storageRef = Storage.storage().reference(forURL: (I have my correct url here))
        let imageName = NSUUID().uuidString
        let storageProfileRef = storageRef.child("Profile_Images").child(Auth.auth().currentUser!.uid).child("\(imageName).png")

    let metadata = StorageMetadata()
    metadata.contentType = "image/jpeg"
    storageProfileRef.putData(imageData, metadata: metadata, completion:
        { (StorageMetadata, error) in
            if (error != nil) {
                return
            }

            storageProfileRef.downloadURL { (url, error) in
                if let metadateImage = url?.absoluteString {
                    dict["profileImageUrl"] = metadateImage

                    Database.database().reference().child("users").child(Auth.auth().currentUser!.uid).updateChildValues(dict, withCompletionBlock:  {
                        (error, ref) in
                        if error == nil {
                            print("Done")
                            return
                        }

                        }

                    )
                }
            }

            storageRef.updateMetadata(metadata) { metadata, error in
                if error != nil {
                 //Uh-oh, an error occurred!
              } else {
                // Updated metadata for 'images/forest.jpg' is returned
              }
            }

    })


        dismiss(animated: true, completion: nil)

    }

       func loadProfileImage() {

    Database.database().reference().child("users").child(Auth.auth().currentUser!.uid).child("profileImageUrl").observe(.value, with: { (snapshot) in

                        // Get download URL from snapshot
                        let downloadURL = snapshot.value as! String

                        // Create a storage reference from the URL
                        let storageRefP = Storage.storage().reference(forURL: downloadURL)

                        // Download the data, assuming a max size of 1MB (you can change this as necessary)
                        storageRefP.getData(maxSize: 1 * 1024 * 1024) { (data, error) -> Void in
                            // Create a UIImage, add it to the array
                         if let imgData = data {
                             self.ProfileImage.image = UIImage(data: imgData)
                         }
                         print(snapshot)
                          //print(PIUvalue as Any)
                    }
                })

        }

}
extension EPViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
           func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
               //print("did Finish Picking Media")
               if let image = info[UIImagePickerController.InfoKey(rawValue: "UIImagePickerControllerOriginalImage")] as? UIImage{
                   selectedImage = image
                   ProfileImage.image = image
               }
               dismiss(animated: true, completion: nil)
           }
       }

extension UIImageView {
    func load(url: URL, onLoadCompletion: ((_ isImageLoaded: Bool) -> Void)? = nil) {
        self.image = nil
        DispatchQueue.global().async { [weak self] in
            if let data = try? Data(contentsOf: url) {
                if let image = UIImage(data: data) {
                    DispatchQueue.main.async {
                        self?.image = image
                        onLoadCompletion?(true)
                    }
                } else {
                    onLoadCompletion?(false)
                }
            } else {
                onLoadCompletion?(false)
            }
        }
    }
}

Я очень признателен вам, ребята, что помогаете мне. Я новичок и пытаюсь заставить это приложение работать должным образом.

1 Ответ

0 голосов
/ 21 июля 2020

Мне нужно было изменить код с:

if let image = info[UIImagePickerController.InfoKey(rawValue: "UIImagePickerControllerOriginalImage")]

на:

if let image = info[UIImagePickerController.InfoKey(rawValue: "UIImagePickerControllerEditedImage")]
...