我一直在尝试在占位符中显示用户选择的个人资料图像。我成功地选择了图像,但正如前面提到的,它不会显示在我选择的占位符中。
我反复收到一条错误消息:
Value of type 'UIImageView' has no member '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!))")
}
}
}
}
}
最佳答案
- 在 Podfile 中添加 pod“SDWebImage”、“~> 5.0”
- 导航到您的项目文件夹并输入“pod install”
- 在您的 swift 文件中添加“导入 SDWebImage”
您可能忘记安装 SDWebImage 库。您可以在这里查看这个库。 https://github.com/SDWebImage/SDWebImage
关于swift - 尝试在 UIImageView 上使用 SDWebImage 扩展时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51940085/