Swift: 使用 UIButtons 作为 UIImages

Swift: Using UIButtons as UIImages

我正在和 Swift 一起开发骰子游戏。我想让玩家选择在点击 'dice' 时按住它一圈。因此,我想使用 UIButtons 作为骰子。我让骰子作为 UIImages 工作,现在我想将 UIImages 转移到 UIButtons。但是在执行此操作时出现错误:

Argument labels '(named:)' do not match any available overloads.

我有点无能,真的不知道如何解决这个问题。

import UIKit

class ViewController: UIViewController {
@IBOutlet weak var dice1: UIButton!
@IBOutlet weak var dice2: UIButton!

let stenenArray = ["Steen1, Steen2, Steen3, Steen4, Steen5, Steen6"]

var randomDiceIndex1 : Int = 0
var randomDiceIndex2 : Int = 0

override func viewDidLoad() {
    super.viewDidLoad()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}

@IBAction func buttonPressed(_ sender: Any) {
    updateDiceImages()
}


func updateDiceImages(){
    dice1 = UIButton(named: stenenArray[randomDiceIndex1])
    dice2 = UIButton?(named: stenenArray[randomDiceIndex2])

    randomDiceIndex1 = Int(arc4random_uniform(6))
    randomDiceIndex2 = Int(arc4random_uniform(6))
}
}

替换

dice1 = UIButton(named: stenenArray[randomDiceIndex1])
dice2 = UIButton?(named: stenenArray[randomDiceIndex2]) 

dice1.setImage(UIImage(named: stenenArray[randomDiceIndex1]), for: .normal)
dice2.setImage(UIImage(named: stenenArray[randomDiceIndex2]), for: .normal)

UIButton 没有使用参数 named: 的初始值设定项。根据声明为 @IBOutletdice1dice2 变量猜测,您可能已经有了按钮,现在只想分配图像而不是创建新按钮:

dice1.setImage(UIImage(named: stenenArray[randomDiceIndex1]), for: .normal)

由于dice1dice2IBOutlets,我认为没有必要重新初始化它们。

尽管如此,UIButton(named: ...)似乎很奇怪!

那么你应该做什么来代替 - 奇怪的初始化 - 按钮:

dice1 = UIButton(named: stenenArray[randomDiceIndex1])
dice2 = UIButton?(named: stenenArray[randomDiceIndex2])

就是简单的给每个人设置一张图片,使用setImage(_:for:)方法:

dice1.setImage(UIImage(named: stenenArray[randomDiceIndex1]), for: .normal)
dice2.setImage(UIImage(named: stenenArray[randomDiceIndex2]), for: .normal)

更新:

看来您需要将 updateDiceImages() 实现为:

func updateDiceImages() {
    randomDiceIndex1 = Int(arc4random_uniform(6))
    randomDiceIndex2 = Int(arc4random_uniform(6))

    dice1 = UIButton(named: stenenArray[randomDiceIndex1])
    dice2 = UIButton?(named: stenenArray[randomDiceIndex2])
}

这意味着您应该在 设置 UIButtons 图像之前为两个 randomDiceIndex 变量生成随机值 ,否则第一个滚动将始终为零。