UIImage nicht transparent

8

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?

    
Adrian Sarli 28.07.2011, 18:08
quelle

6 Antworten

1

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

festzulegen

Wenn das nicht funktioniert, ist die einzige andere Lösung, die einfach ist und keinen Leistungseinbruch haben sollte, zwei Ansichten zu haben:

  • Hintergrundansicht - Dies ist eine Ansicht mit der richtigen Hintergrundfarbe oder dem richtigen Bild
  • Überlagerungsansicht - Diese Ansicht erkennt die Berührungen usw. und zeichnet dann alle Pinselstriche oben. Die Hintergrundfarbe dieser Ansicht kann dann [UIColor clearColor] sein. Wenn Sie also die Pinselbilder zeichnen, wird das Alpha mit [UIColor clearColor] gefüllt. Im Grunde die gleiche Ansicht, die Sie jetzt haben, nur mit einem klaren Hintergrund.

Hinweis: Sie sollten sich nicht mit dem Überblendungsmodus herumschlagen müssen, damit dies funktioniert. Sie sollten die standardmäßige drawInRect: -Methode

verwenden können     
MayorJustin 02.08.2011, 12:39
quelle
4

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

aktualisiert haben

[self setBackgroundColor:[UIColor clearColor]];

Und das ist alles. Getestet an meinem Projekt.

    
Serhii Mamontov 05.08.2011 12:27
quelle
0

Wird der Pinsel png in ein imageView geladen? Das heißt, die Variable pinsel ist ein Objekt von UIImageView, oder? Wenn ja, vielleicht einfach

%Vor%

hilft

    
makaron 28.07.2011 18:46
quelle
0

Ich denke, Sie sollten den Blend-Modus für den Zielort ausprobieren: kCGBlendModeDestinationOut .

Sie können auch einen Punkt zeichnen und stattdessen in rect zeichnen:

%Vor%     
lukya 05.08.2011 11:22
quelle
0

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.

    
Alex Nichol 06.08.2011 19:04
quelle
0

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.

    
omz 07.08.2011 00:16
quelle

Tags und Links