【发布时间】:2017-08-14 23:00:40
【问题描述】:
我在从 UIImageView 中的 UIImagePickerController 加载选定图像时遇到问题。 UIImageView 通过点击 collectionViewCell 中的按钮呈现。在 collectionViewCell 中点击该按钮时,UIImageView 会以动画形式显示在视图中。在点击该 UIImageView 时,会显示 uiimagepicker。选择图像时,选择器会很好地关闭,但图像不会在选择器关闭时加载到 uiimageView 内(占位符图像仍然存在并且不会被所选图像替换)。我的控制台中没有发生崩溃或错误。感谢您的帮助!
UICollectionViewCell 类 - LoginCell
class LoginCell: UICollectionViewCell, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
lazy var createUsernameButton: UIButton = {
let customButton = UIButton(type: .system)
customButton.setTitle("Create Username", for: .normal)
customButton.addTarget(self, action: #selector(animateIn), for: .touchUpInside)
return customButton
}()
func animateIn() {
addSubview(profileImageView)
profileImageView.transform = CGAffineTransform.init(scaleX: 1.3, y: 1.3)
profileImageView.alpha = 0
UIView.animate(withDuration: 0.2) {
self.profileImageView.alpha = 1
self.profileImageView.transform = CGAffineTransform.identity
}
}
lazy var profileImageView: UIImageView = {
let imageView = UIImageView()
imageView.image = UIImage(named: "avatar-bg-2x")
imageView.addGestureRecognizer(UITapGestureRecognizer(target:self, action: #selector(handleSelectProfileImage)))
imageView.isUserInteractionEnabled = true
return imageView
}()
var loginController: LoginController?
func handleSelectProfileImage() {
guard let loginController = delegate as? LoginController else {
return
}
loginController.showImagePicker()
}
//.....
}
loginController 类
class LoginController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, LoginControllerDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
weak var loginCollectionView: UICollectionView!
var loginCell: LoginCell?
func showImagePicker() {
let picker = UIImagePickerController()
picker.delegate = self
picker.allowsEditing = true
present(picker, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
var selectedImageFromImagePicker: UIImage?
if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage {
selectedImageFromImagePicker = editedImage
} else if let originalImage = info["UIImagePickerControllerOriginalImage"] as? UIImage {
selectedImageFromImagePicker = originalImage
}
dismiss(animated: true, completion: {
if let selectedImage = selectedImageFromImagePicker {
self.loginCell?.profileImageView.image = selectedImage
print("was dismissed")
}
})
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let loginCell = collectionView.dequeueReusableCell(withReuseIdentifier: loginCellId, for: indexPath) as! LoginCell
loginCell.delegate = self
return loginCell
}
// ...
}
【问题讨论】:
-
您确认
selectedImageFromImagePicker是正确的吗?看起来它的编码可能是nil。 -
我相信它没有返回 nil(一个值显示在控制台中,用于 selectedImageFromPicker)。当我使用它将选定的图像传递给标准 viewController 中的 UIImageView 时,同样的代码也可以正常工作。与这种情况的不同之处在于 profileImageView 呈现在 collectionViewCell(不是标准的 viewController)中。
标签: ios swift uiimageview uicollectionview uiimagepickercontroller