Swift 使用按钮更改背景图像

Swift 使用按钮更改背景图像,swift,xcode,cocoa,Swift,Xcode,Cocoa,我试图使一个应用程序的功能,以便当用户按下其中一个图像(这是按钮)的背景将改变。我的问题是,当按下按钮时,背景不会变为图片。我一直在寻找答案,但什么也没找到。有人能帮忙吗 这是一个经过测试的答案,试试这个 @IBAction func btnChangeImageClick(_ sender: UIButton) { let imageFromButton : UIImage = sender.image(for: UIControlState.normal)!

我试图使一个应用程序的功能,以便当用户按下其中一个图像(这是按钮)的背景将改变。我的问题是,当按下按钮时,背景不会变为图片。我一直在寻找答案,但什么也没找到。有人能帮忙吗 这是一个经过测试的答案,试试这个

@IBAction func btnChangeImageClick(_ sender: UIButton) {
        let imageFromButton : UIImage = sender.image(for: UIControlState.normal)!

        imgBG.image = imageFromButton
    }

注意:我对UIButton进行了任何操作,以便我们可以从发送者对象获取图像

如何解决问题:

  • 找出按下按钮时的分配是否有问题;将图像设置与按钮回调隔离。您已经通过在
    viewDidLoad
  • 找出图像是否已损坏
  • 图像加载可能会失败:

    let grass = NSImage(named: NSImage.Name(rawValue: "wetgrass"))
    
    生成一个
    NSImage?
    aka
    Optional
    ——这意味着加载具有该名称的图像文件可能会失败。当你确定

    • 您的
      Bundle
      包含一个名为“wetgrass.png”的图像文件,该文件将复制到应用程序中(请检查构建设置>复制Bundle资源)
    • 或者您的资产目录包含一个名为“wetgrass”的条目
    所以
    grass
    可能是
    nil
    。如果为nil,则分配给
    background.image
    的任务只需删除以前设置的任何图像(如果有),重置
    NSImageView
    即可显示乏味的灰色背景

    最终隔离并检查图像分配是否有效,请使用保证存在的图像,如内置图像:

    let testImage = NSImage(named: .advanced)!
    
    注意:我在这里信心十足地强制展开可选文件,因为
    NSImage.Name.advanced
    保证生成图像:)

    这应该是可行的:

    override func viewDidLoad() {
        super.viewDidLoad()
        // Show initial image:
        background.image = NSImage(named: .advanced)!
    }
    
    @IBAction func changeGrass(_ sender: Any) {
        // Show grass or another built-in image:
        background.image = grass ?? NSImage(named: .computer)!
    }
    
    因此,请检查您的
    草地!=无

    尝试以下方法:

    @IBAction func changeGrass(_ sender: Any) {
        if let myButton = sender as? UIButton, let currentImage = myButton.imageView?.image {
            background.image = currentImage
    
            // Animated
            UIView.transition(with: background,
                              duration: 0.75,
                              options: .transitionCrossDissolve,
                              animations: {
                                self.background.image = currentImage
                                })
        }
    }
    

    当前代码有什么问题?请尝试从发件人处获取图像并将其设置为背景。图像抱歉,我以为我暗示了问题所在,但当按下按钮时,背景不会更改为图像。无论是否单击按钮,您是否设置了相同的图像?
    viewDidLoad
    已设置图像。因此
    changeGrass
    不会改变背景。我假设你把这个放到
    viewDidLoad
    中调试问题,看看你是否能看到图像,对吗?谢谢你的帮助,不幸的是我使用的是NS而不是UI,它们的工作方式不同,一个是UI ios编程,而NS是OSX编程。无论如何谢谢。是的,这是OSX。
    @IBAction func changeGrass(_ sender: Any) {
        if let myButton = sender as? UIButton, let currentImage = myButton.imageView?.image {
            background.image = currentImage
    
            // Animated
            UIView.transition(with: background,
                              duration: 0.75,
                              options: .transitionCrossDissolve,
                              animations: {
                                self.background.image = currentImage
                                })
        }
    }