Kartenspiel mehrere Karten als Array?

  • Kartenspiel mehrere Karten als Array?

    Moin,

    verzweifle hier langsam.

    Hab mir mal einen code aus dem Netz gezogen mit dem man einen Kartenflip hinbekommt. Der funktioniert auch ganz gut, allerdings nur mit einer Karte.

    Hab da an ein array gedacht, weiß aber nicht wie ich den im code aufrufen kann? ?(

    Kann mir wer helfen?

    Quellcode

    1. import UIKit
    2. class ViewController: UIViewController {
    3. var cardView: UIView!
    4. var back: UIImageView!
    5. var front: UIImageView!
    6. var showingBack = true
    7. var cardnamesarray:[String] = ["image1.jpg","image2.jpg"]
    8. override func viewDidLoad() {
    9. super.viewDidLoad()
    10. front = UIImageView(image: UIImage(named: "image1.jpg"))
    11. back = UIImageView(image: UIImage(named: "back.png"))
    12. let singleTap = UITapGestureRecognizer(target: self, action: Selector("tapped"))
    13. singleTap.numberOfTapsRequired = 1
    14. let rect = CGRectMake(20, 20, back.image!.size.width, back.image!.size.height)
    15. cardView = UIView(frame: rect)
    16. cardView.addGestureRecognizer(singleTap)
    17. cardView.userInteractionEnabled = true
    18. cardView.addSubview(back)
    19. view.addSubview(cardView)
    20. }
    21. func tapped() {
    22. if (showingBack) {
    23. UIView.transitionFromView(back, toView: front, duration: 1, options: UIViewAnimationOptions.TransitionFlipFromRight, completion: nil)
    24. showingBack = false
    25. } else {
    26. UIView.transitionFromView(front, toView: back, duration: 1, options: UIViewAnimationOptions.TransitionFlipFromLeft, completion: nil)
    27. showingBack = true
    28. }
    29. }
    30. }
    Alles anzeigen
  • Ok, scheint mir keiner helfen zu können.

    Ich kapier das nicht so ganz mit den Arrays. Vielleicht kann mir da wer weiterhelfen.

    Wie kann ich zwei Bilder in ein Array bringen?

    Hab das jetzt so versucht, weiß aber nicht ob das korrekt ist?

    Quellcode

    1. var bild: [String] = ["image1.jpg", "image2.jpg"]
    Und wie kann man nun auf die einzelnen Elemente zugreifen?

    Kann mir wer da mal ein Beispiel bitte geben zu meinen Angaben?

    Grüße
  • Hallo manoh,

    das schau ich mir mal an und danke für den Tip.

    Kann man ein UIImageview-Ausgabe auch abhängig von einem Bilderarray machen?

    Wenn man mal mein Beispiel nimmt:

    Quellcode

    1. var bild: [String] = ["image1.jpg", "image2.jpg"]

    Wie kann ich das jetzt umbauen, dass anstatt nur einem Bild (hier: "image1.jpg"), der Array eingefügt wird bzw. beide Bilder anstatt nur dem einen drin stehen?

    Quellcode

    1. bild = UIImageView(image: UIImage(named: "image1.jpg"))
  • Ok, das hab ich kapiert. Ja du hast recht. In Swift fehlen mir einige Grundlagen die ich nacharbeite. Trotzdem würde ich mich über eure mithilfe freuen.

    UIImageView ist quasi das Gerüst und das eig. Bild übergebe ich mit UIImage?

    Ich habe jetzt ein Array erstellt mit 2 Bilder drin.

    Quellcode

    1. var bild: [String] = ["image1.jpg", "image2.jpg"]




    Dem UIImageview habe ich als Startbild den ersten Index übergeben.

    Quellcode

    1. var front:UIImageView!

    Quellcode

    1. front = UIImageView(image: UIImage(named: bild[0]))

    Das funktioniert super, auch wenn ich den index auf 1.

    Nun kommt mein Problem. Die Karte dreht sich ja einmal. Als erstes liegt sie auf dem Rücken. Tippe ich drauf so soll er mit dem ersten Index [0] anfangen. Tippe ich wieder drauf, dreht sich die Karte zurück auf den Rücken. Tippe ich das nächste mal rauf, so soll der Index des Arrays [1] angezeigt werden.

    Das habe ich jetzt versucht mit einer For-Schleife zu lösen, leider bisher ohne Erfolg.

    Kann ein geschultes Auge mal schauen, ob ich was vergessen habe?

    Oder gehört die For-Schleife schon in die Funktion viewdidload, wo ich dem uiimage den index i übergebe?


    Quellcode

    1. func tapped() {
    2. if (showingBack) {
    3. for var i = 0; i <= bild.count; i++ {
    4. UIView.transitionFromView(back, toView: front, duration: 1, options: UIViewAnimationOptions.TransitionFlipFromRight, completion: nil)
    5. showingBack = false
    6. }
    7. } else {
    8. UIView.transitionFromView(front, toView: back, duration: 1, options: UIViewAnimationOptions.TransitionFlipFromLeft, completion: nil)
    9. showingBack = true
    10. }
    11. }
    12. }
    Alles anzeigen
  • So hab ich das gemacht ;)

    Sollte ja keine Rolle spielen ob nun da oben oder unten.

    Hab das jetzt so eingebaut, wie du beschrieben hast. Leider zeigt er immer noch dasselbe Bild an.

    Was du meinst habe ich verstanden. Wir übergeben oben im viewdidload dem image einen variablen arrayindex der zunächst bei 0 liegt.

    Wenn sich die Karte dreht soll der arrayindex um 1 erhöht werden.

    Mach ich was falsch?

    Quellcode

    1. func tapped() {
    2. if (showingBack) {
    3. UIView.transitionFromView(back, toView: front, duration: 1, options: UIViewAnimationOptions.TransitionFlipFromRight, completion: nil)
    4. showingBack = false
    5. }
    6. else {
    7. index += 1
    8. UIView.transitionFromView(front, toView: back, duration: 1, options: UIViewAnimationOptions.TransitionFlipFromLeft, completion: nil)
    9. showingBack = true
    10. }
    11. }
    Alles anzeigen
  • Doch. Hatte ich so gemacht. Das Problem ist, wenn ich "front" als UIImageview in der tapped Funktion einbaue, zeigt er mir einen Fehler an, wenn das erste Bild angezeigt wird und ich wieder auf die Rückseite drehen will.

    Quellcode

    1. import UIKit
    2. class ViewController: UIViewController {
    3. var cardView: UIView!
    4. var back: UIImageView!
    5. var front:UIImageView!
    6. var showingBack = true
    7. var bild: [String] = ["image1.jpg", "image2.jpg"]
    8. var index: Int = 0
    9. override func viewDidLoad() {
    10. super.viewDidLoad()
    11. front = UIImageView(image: UIImage(named: bild[index]))
    12. back = UIImageView(image: UIImage(named: "back.png"))
    13. let singleTap = UITapGestureRecognizer(target: self, action: Selector("tapped"))
    14. singleTap.numberOfTapsRequired = 1
    15. let rect = CGRectMake(20, 20, back.image!.size.width, back.image!.size.height)
    16. cardView = UIView(frame: rect)
    17. cardView.addGestureRecognizer(singleTap)
    18. cardView.userInteractionEnabled = true
    19. cardView.addSubview(back)
    20. view.addSubview(cardView)
    21. }
    22. func tapped() {
    23. front = UIImageView(image: UIImage(named: bild[index]))
    24. if (showingBack) {
    25. UIView.transitionFromView(back, toView: front, duration: 1, options: UIViewAnimationOptions.TransitionFlipFromRight, completion: nil)
    26. showingBack = false
    27. }
    28. else {
    29. index += 1
    30. UIView.transitionFromView(front, toView: back, duration: 1, options: UIViewAnimationOptions.TransitionFlipFromLeft, completion: nil)
    31. showingBack = true
    32. }
    33. }
    34. }
    Alles anzeigen