在运行时更改 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 中的图像的主要内容,如果未能解决你的问题,请参考以下文章
我如何在 Swift iOS 中检测 UIImageView 中的更改图像
如何在 Swift 中使用 UISlider 更改 UIImageView 中的图像