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?
akaOptional
——这意味着加载具有该名称的图像文件可能会失败。当你确定
- 您的
包含一个名为“wetgrass.png”的图像文件,该文件将复制到应用程序中(请检查构建设置>复制Bundle资源)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
})
}
}