Ich versuche eine Ansicht zu erstellen, die einen Benutzer mit dem Finger zeichnen lässt. Ich habe einen png im Pixelmator des Pinsels gemacht. Meine drawRect: -Methode sieht folgendermaßen aus:
%Vor%Das Pinselbild ist ein PNG mit Transparenz, aber wenn ich die App ausführe, gibt es keine Transparenz. Weiß jemand warum und wie kann man das beheben?
Bearbeiten:
Ich habe festgestellt, dass das Bild transparent ist, aber wenn ich drawInRect
aufrufe, zeichnet das Bild die transparenten Pixel als Hintergrundfarbe der Ansicht. Gibt es einen CGBlendMode, mit dem ich das beheben kann?
Es scheint, als könnte es die aktuelle Füllfarbe des Kontextes annehmen.
Versuchen Sie, die Füllfarbe für den Kontext mit CGContextSetFillColorWithColor () auf [UIColor clearColor] .CGColor
festzulegenWenn das nicht funktioniert, ist die einzige andere Lösung, die einfach ist und keinen Leistungseinbruch haben sollte, zwei Ansichten zu haben:
Hinweis: Sie sollten sich nicht mit dem Überblendungsmodus herumschlagen müssen, damit dies funktioniert. Sie sollten die standardmäßige drawInRect: -Methode
verwenden können Lösung ist sehr einfach, testet auf mein eigenes Projekt. In der Klasse, die Sie mit der benutzerdefinierten - (void)drawRect:(CGRect)rect
in -(id)init
Hintergrundfarbe für self
[self setBackgroundColor:[UIColor clearColor]];
Und das ist alles. Getestet an meinem Projekt.
Ein mögliches Problem ist, dass Sie den blendMode auf 0 setzen. Ich empfehle, die Methode -drawInRect:
ohne einen Mischmodus zu verwenden. Das Problem kann auch sein, dass Ihre Ansicht einen schwarzen Hintergrund hat, aber das ist zweifelhaft. Ich würde auch vorschlagen, den UIImage in einem UIImageView als Test anzuzeigen. Das Problem hängt möglicherweise damit zusammen, wie PixelMator Bilder exportiert.
Ihr Problem ist ein grundlegendes Missverständnis darüber, wie drawRect:
tatsächlich funktioniert. Jedes Mal, wenn Sie etwas in den aktuellen Grafikkontext zeichnen, wird alles, was vorher dort war, gelöscht (so dass nur backgroundColor
übrig bleibt).
Da du nur die aktuellen Touch (s) zeichnest ( touchesNeedingDrawing
wird geleert), gibt es unter dem Rechteck, das du ausfüllst, nichts, was die Transparenz des Bildes, das du zeichnest, zeigen würde, also die Hintergrundfarbe durch.
Sie haben grundsätzlich zwei Möglichkeiten, dies zu beheben:
1) Behalte alle Berührungen, die zum Zeichnen beitragen (lass das touchesNeedingDrawing
-Array nicht leer) und zeichne jedes Mal neu - das wird einfach, aber ziemlich langsam.
2) Zeichne in einen Puffer irgendeiner Art (z. B. UIImage
, unter Verwendung von UIGraphicsBeginImageContext
usw.). Erstellen Sie bei jeder Änderung der Zeichnung einen neuen Puffer. Zeichnen Sie den alten Puffer in den neuen Puffer und die Bilder für den neuen Strich darüber.
Tags und Links objective-c iphone cocoa-touch