【发布时间】:2019-02-13 16:16:40
【问题描述】:
我有一个带有 UIImageView 的 collectionViewHeader,设置为灰色背景颜色。有一个 addPhotoButton,它将用户带到另一个控制器。当他们选择图像时,它会返回到原始控制器,并且应该是 UIImageView 中的图像。
这是来自 collectionViewHeader 的代码:
var selectedImage: UIImage? {
didSet {
self.imageView.image = selectedImage!
print("This is the selectedImage:", selectedImage!)
}
}
let imageView: UIImageView = {
let iv = UIImageView()
iv.backgroundColor = UIColor.rgb(red: 234, green: 246, blue: 246)
iv.contentMode = .scaleAspectFill
iv.clipsToBounds = true
return iv
}()
这是我遇到的每个教程或 StackOverflow 帖子都说要做的。以及打印语句:
print("This is the selectedImage:", selectedImage!)
正在打印:
This is the selectedImage: <UIImage: 0x600001000380>, {485, 482}
所以图像在那里,但它没有被放入 UIImageView。
正在将 imageView 添加到子视图并锚定以在标题的 init 中设置大小:
override init(frame: CGRect) {
super.init(frame: frame)
addSubview(imageView)
addSubview(addimageButton)
addSubview(addimageText)
if #available(iOS 11.0, *){
eventImageView.anchor(top: safeAreaLayoutGuide.topAnchor, left: leftAnchor, bottom: nil, right: rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: frame.width, height: 175)
} else {
// Fallback on earlier OS?
}
addimageButton.anchor(top: eventImageView.topAnchor, left: eventImageView.leftAnchor, bottom: nil, right: imageView.rightAnchor, paddingTop: 25, paddingLeft: (imageView.bounds.size.width - addimageButton.bounds.size.width) / 2, paddingBottom: 0, paddingRight: 0, width: 0, height: 0)
addimageText.anchor(top: nil, left: imageView.leftAnchor, bottom: imageView.bottomAnchor, right: imageView.rightAnchor, paddingTop: 0, paddingLeft: (imageView.bounds.size.width - addimageButton.bounds.size.width) / 2, paddingBottom: 25, paddingRight: 0, width: 0, height: 0)
}
selectedImage 在此处设置在另一个控制器的标头中:
override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: headerId, for: indexPath) as! PhotoSelectorHeader
self.header = header
header.photoImageView.image = selectedImage
if let selectedImage = selectedImage {
if let index = self.images.index(of: selectedImage) {
let selectedAsset = self.assets[index]
let imageManager = PHImageManager.default()
let targetSize = CGSize(width: 600, height: 600)
imageManager.requestImage(for: selectedAsset, targetSize: targetSize, contentMode: .default, options: nil, resultHandler: { (image, info) in
header.photoImageView.image = image
})
}
}
return header
}
fileprivate func setupNavigationButtons() {
navigationController?.navigationBar.tintColor = .black
navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(handleCancel))
navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Select", style: .plain, target: self, action: #selector(handleNext))
}
@objc func handleNext() {
let addPhotoHeader = AddPhotoHeader()
addPhotoHeader.selectedImage = header?.photoImageView.image
navigationController?.popViewController(animated: true)
}
我确定我在这里缺少一个快速步骤,但我已经卡了几天了!
如果您认为问题可能出在我项目的其他地方,请告诉我。
提前感谢您的帮助!!
【问题讨论】:
-
你在哪里设置图像?
-
您需要使用协议将图像视图发送到根视图控制器
-
@Bot 我刚刚编辑了帖子以显示我设置图像的位置。如果您还需要什么,请告诉我!
-
photoImageView的frame或者size在哪里设置?
-
你在哪里添加它作为子视图?
标签: ios swift uicollectionview uiimageview uiimage