ios - imageview 未相应更新

标签 ios swift xcode uiscrollview uiimageview

我想用从照片库中选择的照片创建一个 ImageView ,并通过按下按钮显示在 ScrollView 中。但是选择后图像不会显示,只有当我再次按下按钮时才会显示。有人可以帮我解决这个问题吗?

@IBAction func imageBtnPressed(_ sender: Any) {

    imagePicker()

    let imageView = UIImageView(frame: CGRect(x: (scrollView.bounds.size.width-200)/2, y:(scrollView.bounds.size.height-100)/2, width: 200, height: 100))
    imageView.image = imageOnCanvas
    imageView.contentMode = .scaleAspectFill
    imageView.clipsToBounds = true
    scrollView.addSubview(imageView)

}


func imagePicker(){
    let imagePicker = UIImagePickerController()
    imagePicker.delegate = self
    imagePicker.sourceType = .photoLibrary
    imagePicker.allowsEditing = false
    present(imagePicker, animated: true, completion: nil)
}


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


func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

    let selectedImage = info[.originalImage] as? UIImage
    imageOnCanvas = selectedImage
    dismiss(animated: true, completion: nil)
}

最佳答案

您的代码不会因为 UIImagePickerController 出现而暂停。那么,让我们看看您的代码:

@IBAction func imageBtnPressed(_ sender: Any) {
    imagePicker()
    let imageView = UIImageView(frame: CGRect(x: (scrollView.bounds.size.width-200)/2, y:(scrollView.bounds.size.height-100)/2, width: 200, height: 100))
    imageView.image = imageOnCanvas
    imageView.contentMode = .scaleAspectFill
    imageView.clipsToBounds = true
    scrollView.addSubview(imageView)
}
func imagePicker(){
    let imagePicker = UIImagePickerController()
    imagePicker.delegate = self
    imagePicker.sourceType = .photoLibrary
    imagePicker.allowsEditing = false
    present(imagePicker, animated: true, completion: nil)
}

所以这完全就像在说(用 imagePicker 函数的内容代替函数调用):

@IBAction func imageBtnPressed(_ sender: Any) {
    let imagePicker = UIImagePickerController()
    imagePicker.delegate = self
    imagePicker.sourceType = .photoLibrary
    imagePicker.allowsEditing = false
    present(imagePicker, animated: true, completion: nil)
    let imageView = UIImageView(frame: CGRect(x: (scrollView.bounds.size.width-200)/2, y:(scrollView.bounds.size.height-100)/2, width: 200, height: 100))
    imageView.image = imageOnCanvas
    imageView.contentMode = .scaleAspectFill
    imageView.clipsToBounds = true
    scrollView.addSubview(imageView)
}

好吧,你可以清楚地看到,你指的是 imageOnCanvas 还没有被设置。 imagePicker 仍在显示;用户尚未选择照片。但是你的代码已经完全结束了。您继续添加了一个 subview ,该 subview 由 ImageView 组成,该 ImageView 包含 imageOnCanvas 在代码开始之前中的图像。

关于ios - imageview 未相应更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53689164/

相关文章:

swift - 在两个文本字段中至少有一个字符之前,如何禁用按钮?

ios - 如何自动将设备添加到配置文件?

ios - Xcode 6.1 对 iPhone 6 和 4s 模拟器使用相同的 2x 图像

ios - watchKit 中未定义的体系结构符号

ios - 使用 HTML 5 在 iPad 应用程序中自动播放

ios - 圆形导航栏图像 iphone sdk

swift - cocoa swift上用鼠标简单画图

ios - UIButton 移动到自定义单元格中的 Storyboard

ios - Flutter - 代码签名 "App.framework"失败

ios - 使用分段 Controller 更改 View