我一直在尝试在占位符中显示用户选择的个人资料图片。我可以成功选择图片,但是如上所述,它不会显示在我选择的占位符中。
我反复收到一条错误消息:
“ UIImageView”类型的值没有成员“ sd_setImage”
我写了以下代码。
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!))")
}
}
}
}
}
答案 0 :(得分:1)
您可能忘记了安装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)