在运行时更改 UIImageView 中的图像

Posted

技术标签:

【中文标题】在运行时更改 UIImageView 中的图像【英文标题】:Changing an Image in UIImageView at runtime 【发布时间】:2017-06-07 10:53:12 【问题描述】:

我已经在 UIScrollView 中以编程方式声明了 UIImageView 属性

var scrollView: UIScrollView!    
var imageView = UIImageView(image: UIImage(named: "OPA_farm.png"))
let drawView = UIView()

我用“OPA_farm.png”初始化它的原因是它是我获得正确滚动的超大图像的唯一方法

在 viewDidLoad 中,它们被添加为子视图

    // other stuff here
    myView.addSubview(scrollView)
    myView.addSubview(drawView)
    scrollView.addSubview(imageView)

但更改 UISegmentedControl 发件人应该会更改图像(除其他外)

@IBAction func chooseFarm(_ sender: UISegmentedControl) 
        switch farmSegment.selectedSegmentIndex 
        case 1:
            imageView = UIImageView(image: UIImage(named: "OF_farm.png"))
            // other things
            break
        default:
            imageView = UIImageView(image: UIImage(named: "OPA_farm.png"))
            // other things
      

其他的东西会改变,但 .png 图像不会。我在发布之前(和期间)搜索并尝试过的东西是

imageView.reloadInputViews() imageView.setNeedsDisplay()

这些东西似乎不适用

DispatchQueue.main.async 相关 解析tableView相关

按照 Apple 文档的 QuickHelp Inspector 提供稀疏信息,并且在 Objective C 中。我知道我可以在 XCode 8 中使用转换函数来转换当前的 Swift 语法,并且它与我似乎正在做的其他帖子一致一切正确。我是贝特。有人可以解惑吗?

【问题讨论】:

在函数中使用 self.imageView 而不是仅仅使用 imageView 没有区别。 【参考方案1】:

一旦你有了一个图像视图,你就不需要创建新的了(每次你点击你的按钮)。

您可以在类的顶部声明这些(使用 imageView)

let ofImage = UIImage(named: "OF_farm.png")
let opaImage = UIImage(named: "OPA_farm.png")

在您的案例陈述中,只需将任一图像重新分配给您的 imageView

    switch farmSegment.selectedSegmentIndex 
    case 1:
        imageView.image = ofImage
        // other things
        break
    default:
        imageView.image = opaImage
        // other things
  

在 viewDidLoad 中,将 imageView 添加到 scrollView 后,您可以根据需要添加自动布局约束。请务必先设置:

 imageView.translatesAutoresizingMaskIntoConstraints = false

最后一点:不要忘记在模拟器中使用 7+ 和 SE 设置(以及其他设置)查看您的工作,以确保您拥有适合所有人的东西。

【讨论】:

实际上..,imageView.image = UIImage(named: "XXX_farm.png") 是我在开关盒中必须更改的全部内容。是的,我不必要地创造了新的。我还没有做你建议的其他事情,但我可以看到它在良好的技术方面提供了什么优势。我正在为当地的农业公司加载它,它太具体了,以至于他们需要考虑发布到 App Store,但我会考虑使用不同尺寸的设备。 优秀。很高兴我能帮上忙。听起来是一个有趣的项目!

以上是关于在运行时更改 UIImageView 中的图像的主要内容,如果未能解决你的问题,请参考以下文章

更改设备方向时如何为uiimageview设置动画

我如何在 Swift iOS 中检测 UIImageView 中的更改图像

如何在 Swift 中使用 UISlider 更改 UIImageView 中的图像

Unity 在运行时更改 UI 图像颜色

即使在运行时设置 UIImage,如何在 UIImageView 上做弯角?

为啥当我在平移单元格时更改 UIImageView 的图像时,整个视图会重置一秒钟?