Ich habe also ein Storyboard mit UIImageView und zwei Schaltflächen und benötige diese Schaltflächen, um Bilder in UIImageView zu ändern. In einem Array gespeicherte UII-Bilder. Ich habe es versucht, aber es kann nur das erste Bild anzeigen. Hilfe wäre dankbar :)

Klasse ViewController: UIViewController {

var images: [UIImage] = [
UIImage.init(named: "2")!,
UIImage.init(named: "3")!,
UIImage.init(named: "4")!]

override func viewDidLoad() {
    super.viewDidLoad() }


// Do any additional setup after loading the view.


@IBOutlet weak var imageView: UIImageView!

@IBAction func nextButton(_ sender: Any){
    for el in images {
        imageView.image = el }
}}
0
NanoMuffin 19 Feb. 2020 im 19:48

3 Antworten

Beste Antwort

Sie möchten einen "Index" -Wert verwenden, um zu bestimmen, welches Bild aus Ihrem Array von Bildern angezeigt werden soll.

Beginnen Sie bei 0 (Null), um das erste Bild anzuzeigen (Arrays basieren auf Null).

Wenn Sie auf die Schaltfläche "Weiter" klicken, den Index erhöhen und die Bildansicht aktualisieren (jedoch nicht über die Anzahl der Bilder in Ihrem Array hinausgehen).

Wenn Sie auf die Schaltfläche "Zurück" klicken, den Index verringern und die Bildansicht aktualisieren (aber nicht unter 0 gehen).

class ViewController: UIViewController {

    var images: [UIImage] = [
        UIImage.init(named: "2")!,
        UIImage.init(named: "3")!,
        UIImage.init(named: "4")!
    ]

    @IBOutlet weak var imageView: UIImageView!

    var imageIndex: Int = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        // updae the imageView with the first image
        imageView.image = images[imageIndex]
    }

    @IBAction func nextButton(_ sender: Any) {
        // if we're at the end of the images array, just return
        if imageIndex == images.count - 1 {
            return
        }
        // increment the index
        imageIndex += 1
        // update the image view
        imageView.image = images[imageIndex]
    }

    @IBAction func prevButton(_ sender: Any) {
        // if we're at the start of the images array, just return
        if imageIndex == 0 {
            return
        }
        // decrement the index
        imageIndex -= 1
        // update the image view
        imageView.image = images[imageIndex]
    }

}
0
DonMag 19 Feb. 2020 im 17:03

Aufgrund der for-Schleife in Ihrem @IBAction sehen Sie nur das letzte Bild, das für Ihre Bildansicht festgelegt wurde. Zur Lösung können Sie eine Variable definieren, indem Sie mit der Schaltflächenaktion den Wert erhöhen und auf Ihren Array-Index setzen, der in Ihrer Bildansicht angezeigt wird.

1
Mac3n 19 Feb. 2020 im 16:51
var images = [UIImage(named: "2"), UIImage(named: "3"), UIImage(named: "4")]
var actualImage = 0 // counter to know witch image is displayed

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
}

@IBOutlet weak var imageView: UIImageView!

@IBAction func nextButton(_ sender: Any) {
    imageView.image = images[actualImage]

    if actualImage == images.count - 1 { // check if i'm at the last picture
        actualImage = 0 // reset the counter to the first position
    } else {
        actualImage += 1
    }
}
0
Daniel Ghrenassia 19 Feb. 2020 im 17:03