尝试在UIImageView上使用SDWebImage扩展名时出错

时间:2018-08-21 00:29:31

标签: swift uiimage sdwebimage

我一直在尝试在占位符中显示用户选择的个人资料图片。我可以成功选择图片,但是如上所述,它不会显示在我选择的占位符中。

我反复收到一条错误消息:

  

“ UIImageView”类型的值没有成员“ sd_setImage”

我写了以下代码。

screenshot of problem

class AddProfilePictureViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    @IBOutlet weak var userProfileImageView: UIImageView!

    @IBAction func chooseFromLibraryButtonTapped(_ sender: Any) {
        let profileImagePicker = UIImagePickerController()
        profileImagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
        profileImagePicker.mediaTypes = [kUTTypeImage as String]
        profileImagePicker.delegate = self
        present(profileImagePicker, animated: true, completion: nil)
    }

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
    {
        if let profileImage =
        info[UIImagePickerControllerOriginalImage] as? UIImage, let
        optimizedImageData = UIImageJPEGRepresentation(profileImage, 0.8) {
            // Upload image from here
            uploadProfileImageData(imgageData: optimizedImageData)
        }
        picker.dismiss(animated: true, completion: nil)
    }

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController)
    {
        picker.dismiss(animated: true, completion: nil)
    }

    func uploadProfileImageData(imgageData: Data)
    {
        let activityIndicator = UIActivityIndicatorView.init(activityIndicatorStyle: .gray)
        activityIndicator.startAnimating()
        activityIndicator.center = self.view.center

        self.view.addSubview(activityIndicator)
        let storageReference = Storage.storage().reference()
        let currentUser = Auth.auth().currentUser
        let profileImageRef = storageReference.child("users").child(currentUser!.uid).child("profileImage.jpg")

        let uploadMetaData = FirebaseStorage.StorageMetadata()
        uploadMetaData.contentType = "image/jpeg"

        profileImageRef.putData(imgageData, metadata: uploadMetaData) { (uploadedImageMeta, error) in
            activityIndicator.stopAnimating()
            activityIndicator.removeFromSuperview()

            if error != nil
            {
                print("Error took place \(String(describing: error?.localizedDescription))")
                return
            } else {
                print("Meta data of uploaded image \(String(describing: uploadedImageMeta))")
            }

            let storageReference = Storage.storage().reference()
            // create a reference to the file you want to download
            let profileImageDownloadUrlReference = storageReference.child("users/\(currentUser!.uid)/profileImage.jpg")

            // UIImageView in your ViewController
            // let imageView: UIImageView = self.imageView

            // Placeholder image
            let placeholderImage = UIImage(named: "placeholder.jpg")

            // Load the image using SDWebImage
            userProfileImageView.sd_setImage(with: profileImageDownloadUrlReference, placeholderImage: placeholderImage)

            // fetch the download url

            profileImageDownloadUrlReference.downloadURL { url, error in
                if let error = error {
                    // Handle any errors
                    print("Error took place \(error.localizedDescription)")
                } else {
                    // get the download URL for 'images/stars.jpg'
                    print("Profile image download URL \(String(describing: url!))")
                }
            }
        }
    }
}

3 个答案:

答案 0 :(得分:1)

  1. 在Podfile中添加pod'SDWebImage','〜> 5.0'
  2. 导航到您的项目文件夹,然后键入“ pod install”
  3. 在您的快捷文件中,添加“ import SDWebImage”

您可能忘记了安装SDWebImage库。您可以在此处查看此库。 https://github.com/SDWebImage/SDWebImage

答案 1 :(得分:0)

您必须在将图像设置为图像视图的类的顶部导入SDWebImage。 导入后,只需构建您的应用即可,错误将消失。 您也可以使用KingFisher Pod加载图像。它比sdwebimage轻。

1。首先创建一个存储引用(请参阅Firebase文档):https://Firebase.google.com/docs/storage/ios/download-files

2。现在,您可以直接从Firebase存储作为URL加载图像,而无需存储任何HTTP URL Firebase会在内部为您完成一切。

您可以在Firebase数据库中保存特定图像的参考名称,以识别该特定图像。

使用此代码。

// Reference to an image file in Firebase Storage
 let reference = storageRef.child("images/stars.jpg")

// UIImageView in your ViewController
let imageView: UIImageView = self.imageView

// Placeholder image
let placeholderImage = UIImage(named: "placeholder.jpg")

// Load the image using SDWebImage
imageView.sd_setImage(with: reference, placeholderImage: placeholderImage)

答案 2 :(得分:0)

  1. 在Podfile中添加pod'FirebaseUI / Storage'
  2. 打开终端和pod安装
  3. 您需要在此swift文件中导入FirebaseUI。