Итак, у меня есть 4 изображения, и они названы в последовательности «colour1.jpg», colour2.jpg, 'colour3.jpg', 'colour4.jpg'. Каждое из этих изображений будет действовать как фоновое изображение кнопки.Создайте новое изображение при нажатии кнопки в Swift AppleWatch
Идея состоит в том, что на экране есть 4 кнопки, и каждый раз, когда нажимается одна из кнопок, изображения изменяются случайным образом на каждой из кнопок.
Я использую arc4random_uniform для рандомизации изображений. Но на данный момент это не работает, если пользователь нажимает одну из кнопок, выбирается случайное изображение, но оно одинаково для всех 4 кнопок. и тогда он никогда не изменится с этого образа. то есть. если вы нажмете ту же или другую кнопку, ничего не произойдет. Он просто остается на предыдущем изображении.
Я новичок в быстром, поэтому ценю ваше терпение со мной, но мне очень хотелось бы узнать, где я ошибаюсь.
class InterfaceController: WKInterfaceController {
@IBOutlet var blueColour: WKInterfaceButton!
@IBOutlet var pinkColour: WKInterfaceButton!
@IBOutlet var greenColour: WKInterfaceButton!
@IBOutlet var yellowColour: WKInterfaceButton!
var randomImageA1 = arc4random_uniform(4)
var randomImageA2 = arc4random_uniform(4)
var randomImageA3 = arc4random_uniform(4)
var randomImageA4 = arc4random_uniform(4)
var randomImageB1 = arc4random_uniform(4)
var randomImageB2 = arc4random_uniform(4)
var randomImageB3 = arc4random_uniform(4)
var randomImageB4 = arc4random_uniform(4)
var randomImageC1 = arc4random_uniform(4)
var randomImageC2 = arc4random_uniform(4)
var randomImageC3 = arc4random_uniform(4)
var randomImageC4 = arc4random_uniform(4)
var randomImageD1 = arc4random_uniform(4)
var randomImageD2 = arc4random_uniform(4)
var randomImageD3 = arc4random_uniform(4)
var randomImageD4 = arc4random_uniform(4)
@IBAction func onePressed() {
blueColour.setBackgroundImageNamed("colour\(randomImageA1).jpg")
pinkColour.setBackgroundImageNamed("colour\(randomImageA2).jpg")
greenColour.setBackgroundImageNamed("colour\(randomImageA3).jpg")
yellowColour.setBackgroundImageNamed("colour\(randomImageA4).jpg")
}
@IBAction func twoPressed() {
blueColour.setBackgroundImageNamed("colour\(randomImageB1).jpg")
pinkColour.setBackgroundImageNamed("colour\(randomImageB2).jpg")
greenColour.setBackgroundImageNamed("colour\(randomImageB3).jpg")
yellowColour.setBackgroundImageNamed("colour\(randomImageB4).jpg")
}
@IBAction func threePressed() {
blueColour.setBackgroundImageNamed("colour\(randomImageC1).jpg")
pinkColour.setBackgroundImageNamed("colour\(randomImageC2).jpg")
greenColour.setBackgroundImageNamed("colour\(randomImageC3).jpg")
yellowColour.setBackgroundImageNamed("colour\(randomImageC4).jpg")
}
@IBAction func fourPressed() {
blueColour.setBackgroundImageNamed("colour\(randomImageD1).jpg")
pinkColour.setBackgroundImageNamed("colour\(randomImageD2).jpg")
greenColour.setBackgroundImageNamed("colour\(randomImageD3).jpg")
yellowColour.setBackgroundImageNamed("colour\(randomImageD4).jpg")
}
Спасибо @ Mike - Так я обновил свой код, указанный выше. Я добавил генераторы arc4random_uniform для каждого изображения. Теперь они создают фон изображения для каждой кнопки на экране. Является ли код выше правильно, что я сделал? Мне просто кажется, что мне нужно много времени. Есть ли другой/более легкий/лучший способ, которым я мог бы написать это? Кроме того, с ним все еще есть странное поведение. Если я нажмю кнопку blueColour, чтобы сгенерировать все случайные изображения, если я затем снова нажму на нее, изображения не будут меняться ни для одной кнопки, я должен нажать другую кнопку. Вы знаете, почему это так? спасибо – Nick89
Я обновил, чтобы привести пример. Вы сталкиваетесь с проблемой с переменным охватом. В общем случае присваивания, которые вы создаете вне функции, будут выполняться только один раз. Вы хотите генерировать случайность при каждом нажатии кнопки, поэтому вызов функции должен выполняться внутри функции. – Mike
Спасибо @Mike, я попробую изменить это позже и дам вам знать, как я нахожусь. Это имеет смысл в области обзора, поэтому спасибо за объяснение. – Nick89