2016-12-21 2 views
0

Я новичок в быстрой и создаю игру с tic tac toe, у меня есть большая часть функциональности, работающей в данный момент, но не смогли разобраться, как остановить квадрат от прикосновения более одного раза. Следующий код - это то, как я до сих пор понял штрихи.Остановить UIImageView от касания более одного раза

+0

Вы можете использовать тег на своем изображении, если это UIImageView. Отметьте его нетронутым, 1 коснулся и проверите против тега. –

+0

Извините, Euguene, не знаете, как я мог бы предотвратить повторное касание UIImageView с помощью тега? – harryb94

+0

, когда вы касаетесь его первым, вы делаете tag = 1, когда вы касаетесь его второй раз, вы проверяете, равен ли тег 1, если вы пропустите это касание. Если я понимаю, что вы делаете правильно, это должно сделать трюк. –

ответ

1

Обычно с iOS вы позволяете им выполнять работу за вас. В вашем случае я бы использовал класс UIButton и применил к ним действия tap-actions.

Итак, просто откройте свою раскадровку и замените объекты UIImageView объектами UIButton. Затем установите изображение на все, с чего вы начинаете (с вашего кода, я думаю, это что-то вроде Picture1.png) справа от поля, отмеченного на снимке экрана.

button - image - attribute

Повторите эти действия для всех девяти кнопок TicTacToe.

Ctrl-Track с первой кнопки в ваш вид управления и установки действия. Окно действий должен выглядеть следующим образом:

button action to be reused

Это должно добавить функцию к вашему управления классом представления, как:

@IBAction func button(_ sender: UIButton) { 
    // All your game response goes here 
} 

где sender находится кнопка, которая на самом деле нажата.

Теперь ctrl-track все остальные кнопки на этой же функции. Затем вызывается функция, независимо от того, какая кнопка была нажата. Используйте sender, чтобы установить правильное изображение правой кнопкой.

Теперь вы можете заполнить эту функцию всем своим кодом. Я хотел бы, кроме некоторого представления статуса игры - например. массив 2dim, который удерживает пользователя, который нажал это поле, и может быть использован для проверки, если один пользователь действительно выиграл.

+0

Спасибо за ваш ответ @jboi, но мне сказали, что для этого проекта мне нужно использовать UIImageView's – harryb94

+1

. В этом случае вы можете использовать любой из двух способов: (1), который когда-либо придерживался ImageViews, возможно, не все должны решить должным образом. Давайте узнаем и обсудим (это будет мой путь, но я стар и сильно переживаю в этом пути). И (2) способ использовать один промежуточный шаг в раскадровке: добавить «TapRecognizer» в каждый ImageView и ctrl -отслеживать действие от них к вашей функции в контроллере представления. Остальное остается неизменным. – jboi

0

Что делать, если вы просто добавили флаг?

var isTouched = false 
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

    let Touch = event?.allTouches!.first! 

    if topleft.frame.contains((Touch?.location(in: self.view))!) && !self.isTouched{ 
    self.isTouched = true 
     if currentPlayer == 1 { 
      topleft.image = #imageLiteral(resourceName: "Picture2.png") 
      currentPlayer = 2 
      playerturn.text = "Player 2, it's your turn!" 
      playerturn.textAlignment = .center 
     } 
     else { 
      topleft.image = #imageLiteral(resourceName: "Picture3.png") 
      currentPlayer = 1 
      playerturn.text = "Player 1, it's your turn!" 
      playerturn.textAlignment = .center 
     } 
    } 
+0

Я просто пробовал это, и он не работал ни с Федерико. Я все еще мог нажимать на верхний левый квадрат несколько раз. – harryb94

Смежные вопросы