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

UIView nicht leeren vor dem Reinmalen

Dieses Thema im Forum "OS X-Developer" wurde erstellt von mr.winkle, 18.02.10.

  1. mr.winkle

    mr.winkle Fießers Erstling

    Dabei seit:
    16.08.07
    Beiträge:
    126
    Hallo Leute,
    ich habe hier ein UIView mit einer eigenen Klasse um in selbiges per CoreGraphics reinzumalen.
    Im drawRect dieses Views verfahre ich so:
    Code:
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(ctx, 0.84, 0.45, 0.0, 1.0);
    CGContextFillEllipseInRect(ctx, ...);
    ...
    ...    
    
    und so weiter. Ich cleare / übermale nirgendwo das komplette View.
    Im Interface Builder ist dieses View lediglich auf "Opaque" gestellt, auch "Clear Context before Drawing" ist False.
    Trotzdem wird das View anscheinend vor dem Zeichnen geleert, es wird immer nur das angezeigt was ich beim letzten Durchlauf gemalt habe. Ich würde mich aber gern selber um das Leeren des Views kümmern.
    Habe ich das was übersehen, oder kann man das automatische Leeren woanders ausschalten?

    Dankeschön,
    mr.winkle
     
  2. Termy

    Termy Boskop

    Dabei seit:
    28.12.09
    Beiträge:
    209
    Ich würde sagen, dass du mit diesem Befehl
    Den Kompletten Bereich neu einfärbst. Ist also klar, dass du nachher nichts mehr siehst
     
  3. mr.winkle

    mr.winkle Fießers Erstling

    Dabei seit:
    16.08.07
    Beiträge:
    126
    Danke für den Versuch, aber damit färbe ich nichts ein - dieser Befehl stellt lediglich die im darauf folgenden Befehl benutzte Farbe ein.
    Die eingestellte Farbe ist Orange, das wäre mir also aufgefallen.
    Warte weiterhin auf Antworten...
     
  4. Termy

    Termy Boskop

    Dabei seit:
    28.12.09
    Beiträge:
    209
    Achso, okay ich stell die Farbe so ein:
     
  5. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    @Termy: Diese beiden Funktionen tun aber nicht dasselbe. Das Eine ist die fillColor, das andere die strokeColor. Ersteres wird zum Füllen verwendet, letzteres zum Zeichnen des Randes.

    @mr.winkle: Die drawRect-Methode wird dann aufgerufen, wenn das View NEU gezeichnet werden muss. Wann dieser Fall eintritt, entscheidet das System. Und dieses wird das schon richtig machen. Deine Vorstellung von, dass man immer wieder das View erweitern kann, ohne die alten Dinge auch neu zu zeichnen, widerspricht dem Cocoa- bzw. UIKit-Konzept von Views. Du musst dir also alle alten gezeichneten Dinge speichern lassen, um sie dann bei jedem drawRect-Aufruf neu zu zeichnen.

    Eine Idee wäre, du machst NSArrays mit den Positionsdaten und der Farben deiner Ellipsen. Diese Arrays erweiterst du dann immer, wenn du was Neues zeichnen willst und lässt in der drawRect-Methode dann eine Schleife über sämtliche Einträge laufen.

    Du kannst das Ganze noch ein Wenig effizienter machen, indem du das Argument der Methode in Betracht ziehst. Dieses rect beschreibt nämlich den Anteil des Views, der effektiv neu gezeichnet werden muss. Oft ist das das ganze View, manchmal aber auch nicht. Schau in jedem Schleifendurchgang, ob die Ellipse ganz oder teils innerhalb dieses rects ist. Wenn ja, neu zeichnen, wenn nein, continue! Weiter kannst du deine Einrichtung MVC-konform machen, das hilft auch!

    Gruss ppocket
     

Diese Seite empfehlen