1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Image View zeichnet falsch

Dieses Thema im Forum "iOS-Developer" wurde erstellt von Poljpocket, 20.07.09.

  1. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    Hallo Leute,

    wiederum habe ich ein bis jetzt ungelöstes Problem, nämlich:

    Ich habe ein NSImageView, das mir einen 16x16 StatusDot zeichnen soll. Nun kommt es leider vor, dass das Bild (der Dot) manchmal korrekt gezeichnet wird und manchmal nicht "geflippt", also auf dem Kopf. Ich kann mir nicht erklären, wie es dazu kommen kann, denn die Befehle sind mit Sicherheit immer die selben. Meistens wird es am Anfang (nachdem die Applikation gestartet wurde) richtig gezeichnet und sobald ein Menu aufgerufen wird nicht mehr!!

    Danke für mögliche Hinweise auf die Lösung oder die Lösung selber

    Gruss ppocket
     
  2. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    Manchmal mache ich etwas und mir geht es am nächsten Tag ausgezeichnet. Manchmal nicht.

    Wieso kannst du mir das nicht erklären?
     
  3. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    Du bist auch ein Mensch, mit Gefühlen... der Computer aber sollte immer genau das machen, was man ihm sagt. Dass ihm aber immer dasselbe gesagt wird, er aber nicht immer dasselbe tut, ist etwas komisch...

    Ich will damit nur sagen, dass dein Vergleich nicht ganz angebracht ist, nicht wahr??

    Gruss ppocket
     
  4. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    Der ist absolut angebracht.

    Amin mag Dir sagen:

    Deine Fehlerbeschreibung ist für Leute, die nicht in Dein Projekt involviert sind, mehr als mangelhaft.
    Kein Code, keine Screenshots ... usw.
    In der Regel gibt es drei Bs > Behauptung > Begründung > Beweis.

    Wer soll Dir mit der jetzige Beschreibung helfen können?
    Lade doch mal ein kleines Beispielprojekt hoch, dass den Sachverhalt verdeutlicht.

    Viele Grüße
     
  5. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    Nein, ein Computer soll nicht immer bei der gleichen Befehlsfolge das Gleiche machen. Darauf sind auch gerade erst Linuxer hereingefallen
     
  6. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Es wäre hilfreich, wenn Du den Code für den View mal hier posten würdest.

    Bei CIImage ist das ein bekanntes Probelm.

    Alex
     
  7. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    Hallo, danke für die Antworten!

    Ich poste dir gerne den einzigen Befehl, den es gibt, nämlich: Dem ImageView ein Bild zuweisen, sonst gibts da keinen Code :D Der Rest ist im nib-File. Es passiert übrigens auch, wenn ich dem ImageView direkt per nib eine Bilddatei zuordne...

    Aber da es ein bekanntes Problem ist, wurde es nicht gelöst, also muss ich wohl damit leben...

    Danke und ein Gruss ppocket
     
  8. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Also ein CIImage?

    Alex
     
  9. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    (nein), NSImageView...
     
  10. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    Naja, das kann man so immer noch nicht sagen.
    Lade doch mal ein Beispiel hoch. Hier raten immer noch alle was Du da baust.

    Viele Grüße
     
  11. Peter Maurer

    Peter Maurer Carmeliter-Renette

    Dabei seit:
    16.03.04
    Beiträge:
    3.274
    <imnebelstocher>Benutzt Du das Bild nur innerhalb des NSImageViews, oder noch anderswo?</imnebelstocher>

    Hintergrund der Frage: Irgendjemand ent- bzw. flippt Dir ungefragt Dein Bild. Das koennte z.B. das Menue sein, das Du erwaehnst, falls das Bild darin auch vorkommt.
     
  12. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    Ich hab mal so eine kleine Beispiel-Applikation gebastelt... aaaaaber nun festgestellt, dass ich damit das Problem nicht rekonstruieren kann, hier funktioniert alles perfekt, obwohl die Sache GENAU so, wie in meiner Applikation abläuft...

    @Peter: Das Bild wird jedes Mal - wie du im Code sehen kannst - per [NSImage imageNamed:mad:"..."]; neu geladen, also eine neue, ungebrauchte Instanz erstellt.

    Es muss also sonst irgendetwas falsch laufen in meiner App, mal schauen :) Wenn ich nicht weiter weiss, poste ich halt alles hier... obwohl mir das nicht gefällt^^ versteht ihr doch?!?

    Gruss ppocket
     

    Anhänge:

  13. MacAlzenau

    MacAlzenau Golden Noble

    Dabei seit:
    26.12.05
    Beiträge:
    19.398
    Wenn es um ein Geheimprojekt geht, das du noch nicht veröffentlichen willst, schick den Problemcode doch den paar Leuten, die sich hier geäußert haben, nach Absprache per PN oder Mail.
     
  14. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    So, das ist doch schon mal ein Schritt. Jetzt kuck genau, was in Deiner App anders ist.

    Verändere das Beispiel so lange in Richtung Deiner App, bis das Problem auftaucht.

    Alex
     
  15. mad-boy

    mad-boy Cox Orange

    Dabei seit:
    18.09.07
    Beiträge:
    97
    Hallo,

    ich bin was Cocoa angeht bisher nur auf dem iPhone unterwegs, deswegen mag die ein oder andere Klasse anders heißen, das Prinzip sollte aber identisch sein: Ich hatte das Problem, als ich einen UIView eine CGImage habe zeichnen lassen. Die Klassen des Cocoa Frameworks besitzen, wie ich dabei rausgefunden habe, ein anderes Koordinaten-System als die C-Klassen. Nämlich genau upsidedown. Ich habe das Problem damals nicht weiter verfolgt sondern mir einfach statt einem CGImage ein UIImage geholt und das Problem war verschwunden, allerdings habe ich gelesen, dass es wohl eine Möglichkeit gibt, die Koordinatensysteme zu flippen, was u.a. wohl von einigen Cocoa Klassen getan wird. Vielleicht zeichnest du hier also einmal vor einem Aufruf einer solchen Klasse und einmal danach...?

    Das sind aber auch nur Mutmaßungen.
     
  16. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    mad-boy: Ganz richtig, in diese Richtung geht auch meine Vermutung. Aber wenn der TE seinen Code nicht rausrückt...

    Alex
     
  17. Peter Maurer

    Peter Maurer Carmeliter-Renette

    Dabei seit:
    16.03.04
    Beiträge:
    3.274
    Genau das ist ein unzulaessiger Schluss. Aus der NSImage-Dokumentation:

    Kurz: Was genau NSImage intern macht, das erzaehlen uns die Apfelmenschen mit voller Absicht nicht, weil sich das wahrscheinlich von OS-Version zu OS-Version auch mal aendern kann, aber es ist in Deinem Fall durchaus anzunehmen, dass immer wieder dieselbe NSImage-Instanz verwendet wird.

    Und das kann man ja leicht ueberpruefen und ggf. ausschliessen, indem man mal die Zeiger-Werte vergleicht.
     
  18. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    Danke Peter!

    Genau das wars! Ich hatte genau dieselben Icons auch in der nebenstehenden Outline gezeichnet. Ich hab die mal ausser Gefecht gesetzt, Problem ade! Dann hab ich nur die grünen zeichnen lassen, nur das grüne machte Probleme! Und ich hab auch die Adressen gecheckt, sind echt dieselben Instanzen, die da verwendet werden!

    Die NSCell-Subklasse, welche die Icons zeichnet, flippt die Image-Instanzen, je nach flipping des Outlines (ist immer geflippt!). Wenn ich nachher (nach dem Zeichnen) den Status wieder zurücksetze (also den vorherigen Wert wiederherstelle), ist das Problem weg!

    Vielen Dank fürs Ausharren ohne Code und für die Hilfe natürlich :)

    Gruss ppocket
     
    #18 Poljpocket, 22.07.09
    Zuletzt bearbeitet: 22.07.09
    Peter Maurer gefällt das.
  19. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    @Mad-Boy: Das weiss ich sehr wohl, das mit den verschiedenen Koordinatensystemen. Ich flippe die Sache normalerweise immer, ist für mich logischer, Apple macht das ja auch immer! Das Einzige, was ich nicht wusste, ist, dass NSImages gecacht werden können und so, trotz eines neuen Aufrufes, dieselben Instanzen verwendet werden können. Wenn jetzt das Image geflippt wird und das NSImageView (komischerweise) das nicht mehr richtig setzt, ist das Bild dann auf dem Kopf, ist klar!! Darum: Flip vorher abspeichern, flippen & zeichnen, flip zurücksetzen -> Problem gelöst!

    danke :)
     
  20. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    Apple macht das wirklich immer so?

    Ich bin übrigens ein großer Freund von Apples "mathematischen" Koordinatensystem. Woher kommt denn überhaupt das Koordinatensystem mit 0 oben links? Mutmaßlich einfach aus der Fernsehtechnik, da dort auch Monitore ihren Nullpunkt haben. Das hat man dann vor geraumer Vorzeit einfach im Computer nachgebaut. Wohl weil es leichter zu implementieren war.

    Aber in der Wirklichkeit hängt es doch davon ab, was man anzeigen möchte. Bei Text findet man den Nullpunkt oben links ganz natürlich. Man? Araber auch? Chinesen machen den AFAIK auch oben links, schreiben dann aber senkrecht, also um 90 ° gedreht. MAW: Die Schreibrichtung ist wirklich kein Argument, da diese kulturell unterschiedlich ist.

    Unten links ist ein einheitliches System, weil es wohl wirklich von allen Mathematikern auf der Welt benutzt wird. Man ist es bloß beim Programmieren nicht gewohnt.
     

Diese Seite empfehlen