Ich habe ein UIView
, das auf opaque = NO
gesetzt ist und alles funktioniert gut. In drawRect
mache ich benutzerdefinierte Zeichnung, und das funktioniert
aber das
%Vor%führt dazu, dass KEINE Füllung erzeugt wird (Sie können sogar andere Sachen sehen, die ich über den CGContext gezeichnet habe). Wie kann ich eine weiße Füllung zeichnen?
Hinweis: Wenn das Steuerelement nicht undurchsichtig ist, funktioniert es immer noch nicht.
Warum nicht CGContextSetFillColorWithColor
verwenden? Dann können Sie das CGColor-Objekt direkt übergeben, anstatt seine Komponenten zu extrahieren und anzunehmen, dass es sich im selben Farbraum wie der Kontext befindet.
Bearbeitet zum Hinzufügen:
das funktioniert
%Vor%aber das
%Vor%führt dazu, dass KEINE Füllung erzeugt wird (Sie können sogar andere Sachen sehen, die ich über den CGContext gezeichnet habe).
Wie bereits erwähnt, setzt diese Art der Füllfarbe voraus, dass sich die Farbe im selben Farbraum wie der Kontext befindet.
Normalerweise befinden sich die meisten CGContexte in einem RGB-Farbraum. whiteColor
hingegen ist fast sicher in einem weißen Farbraum, der nur ein oder zwei (weiße und Alpha) Komponenten aufweist.
Da also der Kontext in einem RGB-Farbraum liegt, erwartet CGContextSetFillColor
, dass drei oder vier Komponenten (rot, grün, blau und alpha) übergeben werden. Wenn Sie die Komponenten von whiteColor
CGColor erhalten, erhalten Sie einen Zeiger auf ein C-Array, das nur zwei Komponenten enthält. CGContextSetFillColor
liest die drei oder vier Komponenten, die es will, egal was; Wenn Sie weniger passieren, kann es Müll nach ihnen finden, oder es kann Nullen finden.
Wenn es eine Null in der Alpha-Position findet, dann haben Sie die Füllfarbe auf etwas zwischen gelb (rot = 1.0, grün = 1.0, blau = 0.0) und weiß (alle drei = 1.0) eingestellt Null Alpha. Dadurch wird die Füllung nicht angezeigt: Sie füllen mit einer transparenten Farbe.
Das Problem besteht darin, dass der Farbraum, in dem sich der Kontext befindet (mit drei oder vier Komponenten), und der Farbraum, in dem sich die Farbe befindet (mit einer oder zwei Komponenten), nicht übereinstimmen. Die Lösung besteht darin, die fehlende Übereinstimmung zu entfernen, was CGContextSetFillColorWithColor
bewirkt: Da Sie das gesamte CGColor-Objekt und nicht nur ein Zahlenfeld übergeben, kann Core Graphics den Farbraum des Kontexts auf den des Farbobjekts und einstellen interpretiere die Komponenten des Farbobjekts korrekt.
Tags und Links iphone core-graphics