2016-12-21 3 views
0

Ich bin neu zu schnell und bin ein Tic Tac Toe Spiel erstellen, habe ich die meisten Funktionen arbeiten im Moment, aber nicht in der Lage zu erarbeiten, wie man ein Quadrat zu stoppen von mehr als einmal berührt werden. Der folgende Code ist, wie ich die Berührungen bisher erkannt habe.Stop UIImageView von mehr als einmal berührt werden

+0

Sie können Tag auf Ihrem Bild verwenden, wenn es ein UIImageView ist. Markieren Sie es 0 unberührt, 1 berührt, und überprüfen Sie gegen das Tag. –

+0

Sorry Euguene, nicht sicher, wie ich verhindern würde, dass UIImageView mit einem Tag wieder berührt wird? – harryb94

+0

Wenn Sie es zuerst berühren, machen Sie Tag = 1, wenn Sie es zum zweiten Mal berühren, überprüfen Sie, ob Tag 1 ist, wenn Sie diese Berührung überspringen. Wenn ich verstehe, was Sie richtig machen, sollte dies den Trick machen. –

Antwort

1

Normalerweise mit iOS lassen Sie sie die Arbeit für Sie erledigen. In Ihrem Fall würde ich die UIButton Klasse verwenden und Tap-Aktionen auf sie setzen.

Öffnen Sie einfach Ihr Storyboard und ersetzen Sie Ihre UIImageView Objekte durch UIButton Objekte. Dann setze das Bild auf das, womit du beginnst (in deinem Code, ich denke es ist etwa Picture1.png) auf der rechten Seite in dem Feld, das auf dem Screenshot markiert ist.

button - image - attribute

Wiederholen Sie für alle neun TicTacToe Tasten.

Ctrl-Track von der ersten Schaltfläche in Ihre Kontrollansicht und legen Sie die Aktion. Das Aktionsfenster sollte wie folgt aussehen:

button action to be reused

Dies sollte eine Funktion, um Ihre Steueransichtsklasse, wie:

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

wo sender die Schaltfläche ist, dass tatsächlich gedrückt wurde.

Jetzt Strg-track alle anderen Tasten auf diese gleiche Funktion. Die Funktion wird dann aufgerufen, unabhängig davon, welche Taste gedrückt wurde. Verwenden Sie sender, um das rechte Bild auf der rechten Schaltfläche festzulegen.

Sie können jetzt die Funktion mit Ihrem gesamten Code füllen. Ich würde einige Darstellungen des Spielstatus - z. ein 2dim-Array - das hält, welcher Benutzer auf welches Feld geklickt hat und kann verwendet werden, um zu überprüfen, ob ein Benutzer gewonnen hat.

+0

Danke für deine Antwort @jboi, aber mir wurde gesagt, dass ich für dieses Projekt UIImageView's – harryb94

+1

verwenden muss. In diesem Fall kannst du einen von zwei Wegen gehen: (1) wer immer auf ImageViews klebt, hat vielleicht nicht alle Innenseiten zu entscheiden richtig. Lassen Sie uns herausfinden und diskutieren (das wäre meine Art, aber ich bin alt und schwer erfahren auf diese Weise) Und (2) ist, einen Zwischenschritt auf Storyboard zu verwenden: Fügen Sie jedem ImageView und Ctrl einen 'TapRecognizer' hinzu Verfolgen Sie die Aktion von ihnen zu Ihrer Funktion im View-Controller. Der Rest bleibt gleich. – jboi

0

Was ist, wenn Sie einfach eine Flagge hinzufügen?

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

Ich habe es gerade versucht und es hat auch Federico nicht funktioniert. Ich konnte immer noch mehrmals auf das Quadrat oben links klicken. – harryb94

Verwandte Themen