我试图建立一个应用程序在那里我有10个UIViews,当你按下一个按钮,它随机显示他们一次一个。我创建的意见阵列(我不知道如果我这样做,以正确的方式),我试图代码的函数来显示它们(随机,一次一个)。所以,现在我有十UIViews(我只是把一个到这里来告诉你,但我有10个):
@IBOutlet weak var messageView: UIView!
var messageArray = [UIView] ()
var currentVisibleMViews = 1
和里面viewDidLoad中(很明显,我仍然这样做10次):
messageArray.append(messageView)
现在,我连我的按钮,以及和我尝试不同的东西。现在是这样的:
@IBAction func addMessageViewButton(_ sender: Any) {
if currentVisibleMViews > 9 {
messageArray.forEach { (uiview) in
uiview.isHidden = true
}
currentVisibleMViews = 0
} else {
messageArray[currentVisibleMViews].isHidden = false
currentVisibleMViews += 1
}
}
通过这种方式,它显示在一个时间一个视图中为了,但是当我有10个它会删除它们。另外,如果我举个例子,有8次,我关闭messageView6并再次按addMessageViewButton,也不会告诉我messageView6但messageView9(这就是为什么我希望他们是随机的)。
我GOOGLE了如何做什么,我想,它说,像我应该尝试费舍尔耶茨洗牌算法,但我不知道该怎么做,因为我的数组包含UIViews。任何解决方案?
我会避免,可以很容易,因为它只会为你复杂的事情来计算保持状态:
@IBAction func addMessageViewButton(_ sender: Any) {
let hiddenViews = messageArray.filter { $0.isHidden }
guard !hiddenViews.isEmpty else {
// hide everything if nothing else to show
messageArray.forEach { $0.isHidden = true }
return
}
// show random view
let randomHiddenView = hiddenViews.randomElement()
randomHiddenView.isHidden = false
}
你听说过或试图使用本机雨燕方法shufle()
?
https://developer.apple.com/documentation/swift/array/2994753-shuffle
var names = [uviewC, uviewF, uviewE, uviewA, uviewD, uviewB]
names.shuffle(using:)
会导致类似,比如:
[uviewD, uviewE, uviewB, uviewC, uviewF, uviewA]