Darstellung von Images in einem Array

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Darstellung von Images in einem Array

    Ich bin neu hier, mein Programm ist fast fertig, aber die App sollte etwas mehr her machen. :D
    Ich moechte pro Reihe eine unterschiedliche Anzahl von Bildern in einem Array speichern und anzeigen (und spaeter manipulieren!). Mit Text geht das hervorragend, aber mit Bildern bin ich immer noch nicht weiter gekommen ;( . Fuer einen "heissen" Tip waere ich sehr dankbar.

    LG
    DiSasso
  • Wenn es mit Text hervorragend geht ... wie machst Du es? Nutzt Du eine UICollectionView, malst selber in eine View oder gibst Text einfach hintereinander in Labeln aus? Speichern kannst Du sicher in ein Array ... das hat aber wiederum mit dem Anzeigen nichts zu tun, hier bieten sich Listen oder die o.g. Collections an.

    Versuche Deine Frage einmal so zu formulieren, dass sie jemand ohne Kenntnis Deiner bisherigen Ansätze / Gedanken / Aufgabenstellung verstehen kann. Wir sind keine Hellseher :D

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Sorry, ihr habt natuerlich recht. Ich entwickle auf einem MacBook Pro (10.13.6) fuer iOS Geraete. Ich benutze Xcode und programmiere in Swift.
    Ich habe ein Array mit 9 Reihen erstellt, in jeder Reihe ist eine unterschiedliche Anzahl von Buchstaben vorhanden. Die anzahl der Reihen ist vom Benutzer waehlbar. Anzeigen tue ich das Array mittels UITableView, die Zeilenhoehe wird je nach Anzahl der Reihen so modifiziert, dass der gesamte Bildschirm benutzt wird.
    Die Frage ist, kann ich die Buchstaben durch Bilder ersetzen und wie?
    Die Dokumentation ist so umfangreich, dass ich als Newbie etwas ueberfordert bin und bitte um etwas Nachsicht ;) .
    DiSasso
  • Theoretisch müsste es möglich sein, die UIImages in UIImageViews zu packen, welche dann der ContentView der UITableViewCells hinzugefügt werden ... sorry für den Bandwurm.

    Es erscheint mir aber recht konstruiert und ich würde eher versuchen, entweder eine UICollectionView entsprechend anzupassen oder die Images einfach ohne UITableView zu positionieren. Zumindest ist mir bei Deiner Beschreibung nicht klar, warum Du auf einer TableView aufsetzt...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Vielen Dank fuer Deine Muehe. Die Gruende fuer UITableView sind zwei. Erstens, in meinem Kurs wurde dies ausfuehrlich behandelt :D , zweitens, ich brauche fuer mein Programm 3 Arrays mit unterschiedlichen Datenstrukturen, die ich abgleichen und (an einer Stelle) vom Benutzer manipulieren lassen muss. Fuer die Programmlogik erschien es mir sinnvoll, dies mit Arrays zu realisieren. Kannst Du mir bitte kurz erklaeren, wie ich Deinen "Bandwurm" realisiere?

    Dietrich
  • Naja...
    • erstelle eine UIImageView
    • weise deren image-Property die Grafik zu
    • setze das Frame passend zum Positionieren (oder nutze Layout-Contraints)
    • füge die Image-View als Subview der Content-View der Zelle hinzu
    Googlen nach „UIImageView add UITableViewCell“ bringt Dich auch weiter :)

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Also

    Ich habe mit Table View fast alles realisiert, komme allerdings an einer Stelle nicht weiter. Hier kurz der Code wo es hakt:

    var bilder = [Bild]()

    bilder.append(Bild(name: "R1", bildName: "Blume"))
    bilder.append(Bild(name: "R2", bildName: "Blume Blume"))
    bilder.append(Bild(name: "R3", bildName: "Blume, Blume, Blume"))

    Die erste Reihe wird korrekt dargestellt, ab der 2. Reihe erscheint das default Bild, das genommen wird, wenn das korrekte Bild nicht gefunden wird.
    Ich habe es auch mit "Blume" "Blume" und mit einem Komma dazwischen probiert, bekommen dann aber einen Compiler Fehler.
    Was kann ich tun?
    Da ich später auf einzelne Bilder zugreifen und manipulieren bzw. löschen und weiterverarbeiten will sind statische Bilder keine Option.
    Für einen guten Tipp wäre ich sehr dankbar.

    Dietrich
  • Hey,

    Ich glaube nicht, dass das Problem bei deinem vorliegendem Code Snippet liegt. Zudem wird dir hierüber vermutlich niemand Auskunft darüber geben können, da niemand deine Klasse "Bild" kennt. Hast du dein Array "bilder" mal gedebuggt? Für mich klingt das spontan eher nach einem Fehler in den DataSource functions der TableView. Daher: Wie sehen diese denn aus? Also cellForRowAtIndex etc.

    LG
  • In der Klasse Bild wird dieses initialisiert mit namen und bildNeme. Die Table View funktioniert, die gewählten Zeilen werden richtig angezeigt, auch das Bild. das ich unter dem bildNamen angegeben wird angezeigt, d.h. das Bild das in den Assets unter Blume abgelegt ist, ansonsten kommt ein von mir festgelegtes "default"Bild..
    Meine Frage ist, ob oder wie ich die Blume 2x oder öfter angezeigt bekomme. (z.B. bildName: "Blume"*2 oder ähnlich). Wenn das in Swift nicht geht, wäre ich für einen anderen Lösungsansatz dankbar.
    LG
  • Prinzipiell kann man auch mit Swift ein Bild mehrfach anzeigen. Von obigem
    Code und deiner Erklärung dazu hätte ich aber nicht vermutet, dass das dein
    Ziel ist.

    bildName ist doch eigentlich schon sehr klar. Name eines Bildes.
    Willst du das Bild mehrfach anzeigen, kannst du im einfachen Fall in der
    Tableview weitere PrototypeCells erstellen, die entsprechend viele Bilder
    anzeigen und dann den jeweils benötigten Prototyp wählen.

    Vielleicht ist es aber sogar passend, in einem UIImage nur die Breite n mal
    so groß zu wählen wie das Bild und mit Resizing.Mode.tile eine n-fache
    Darstellung zu erreichen.

    Wenn eine Lösung mit TableView schwierig ist, ist vielleicht doch eine
    CollectionView passender.

    Marco
  • Ich bin noch mit Computern groß geworden, die nicht multiplizieren und dividieren konnten und man diese Funktionen in Unterprogrammen mit addieren und subtrahieren selbst erstellen mußte. Bei den heutigen Compilern hätte ich schon erwartet, daß man einzelne Bilder ganz einfach mit einem Multiplikator mehrfach anzeigen lassen kann.
    Wenn das bei Swift mit TableView nicht geht, muß ich es wohl mit CollectionView probieren, das mit den PrototypeCells hatte ich schon versucht, es funktioniert jedoch nicht und ist auch von meiner Programmlogik nicht praktikabel (ich müsste mich mit min 15 PrototypCells herumschlagen, da ich ja den Nutzer entscheiden lassen will, wieviele Bilder er manipulieren oder löschen will).
    Würdest Du mir bitte Deinen 2. Vorschlag mal kurz an Hand eines Programmschnipsels erläutern?

    Vielen Dank für Deine Mühe.

    Dietrich
  • Ich habe das jetzt mal probiert. Es ging nicht so leicht, wie ich es erwartet hatte.
    Für das Beispiel habe ich eine einfache UITableView mit einem Prototyp angelegt.
    Meine Bilder sind 128 Pixel hoch und können einfach oder doppelt dargestellt werden.
    Im folgenden Ausschnitt des Codes wird erst ein Bild normal aus den Assets ermittelt
    und dann eine Kopie erstellt, die mittels UIImage.ResizingMode.tile wiederholt angezeigt wird.
    Der ContentMode des UIImageView ist auf Scale To Fill gestellt.

    Quellcode

    1. if let im1 = UIImage(named: "apple-rainbow")
    2. {
    3. images.append(im1)
    4. let im3 = im1.resizableImage(withCapInsets: UIEdgeInsets.zero, resizingMode: UIImage.ResizingMode.tile)
    5. images.append(im3)
    6. }


    Mein UIImageView der TableViewCell ist 256 Pixel breit. Bei jedem zweiten (wie zuvor in Zeile 4 erstellt) UIImage rufe ich dann sizeToFit auf:

    Quellcode

    1. if indexPath.row % 2 == 0
    2. {
    3. cell.myImageView.sizeToFit()
    4. }
    sizeToFit funktioniert nicht mehr, wenn man mehr als zwei "Breiten" hat. Dann muss man den Frame manuell festlegen.
    Bei mir reicht als Alternative dann:

    Quellcode

    1. let f = cell.myImageView.frame
    2. cell.myImageView.frame = CGRect(x: f.minX, y: f.minY, width: 128, height: f.height)
    Vielleicht hilft das so ja schon!
    Dateien
  • Das sieht doch schon mal sehr gut aus :) , ich werde es morgen probieren.
    Vielen Dank für Deine Hilfe, ich werde mich auf jeden Fall melden und berichten.
    In den Ankündigungen von Apple zu den Updates von SWIFT und xCode habe ich etwasa von neuen UI Tools
    gelesen, vielleicht wird dann alles noch einfacher. Ich bin noch eine Woche in der Toskana und habe
    hier nur ein sehr limitiertes Intertnet. Sobald ich wieder zu Hause bin und Catalina (ist wohl Voraussetzung
    für die neuen Tools) freigegeben ist, werde ich die Updates einspielen und es probieren.
    Nochmals vielen Dank

    Dietrich