在运行时更改UIImageView中的图像

时间:2017-06-07 10:53:12

标签: ios swift3 uiimageview

我已在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相关的

遵循QuickHelp Inspector到Apple文档提供稀疏信息并在Objective C中。我知道我可以在XCode 8中使用转换函数来获取当前的Swift语法,并且它同意其他帖子,因为我似乎在做一切都正确。我打败了。有人会神秘化吗?

1 个答案:

答案 0 :(得分: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设置(以及其他设置)在模拟器中查看您的工作,以确保您拥有适合每个人的功能。