CGContextSetBlendMode Problem

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • CGContextSetBlendMode Problem

    Guten Morgen Kollegen,

    habe ein Problem mit CGContextSetBlendMode(). Habe damit vorher noch nicht gearbeitet und entweder bekomme ich nur einen schwarzes Feld oder der Blend Effekt wird gar nicht angewendet.
    Habe eine UIView darauf liegt ein UIImageView als Hintergrund in kompletter Größe (320x480). Nun lass ich nach spezifischen Daten weitere UIViews erstellen. Die drawRect Methode in den weiteren UIViews sieht wie folgt aus...

    Quellcode

    1. CGContextRef context = UIGraphicsGetCurrentContext();
    2. CGContextSetLineWidth(context, 2.0);
    3. CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
    4. CGRect rectangle = CGRectMake(0, 0, DISPLAYWIDTH, BARHEIGHT);
    5. CGContextAddRect(context, rectangle);
    6. CGContextStrokePath(context);
    7. CGContextSetFillColorWithColor(context, self.fillColor.CGColor);
    8. CGContextFillRect(context, rectangle);


    Nun würde ich diese UIView gerne mit dem Blendeffekt Multiply über das UIImageView laden. Wie mach ich das? Leider funktionierte bis jetzt keiner meiner Versuche. Habe das Gefühl das dem Blendeffekt die Hintergrundinformationen fehlen, auf die es gezeichnet werden soll, aber das ist nur eine Vermutung.
  • Andreas Grauel schrieb:

    Guten Morgen Kollegen,

    habe ein Problem mit CGContextSetBlendMode(). Habe damit vorher noch nicht gearbeitet und entweder bekomme ich nur einen schwarzes Feld oder der Blend Effekt wird gar nicht angewendet.
    Habe eine UIView darauf liegt ein UIImageView als Hintergrund in kompletter Größe (320x480). Nun lass ich nach spezifischen Daten weitere UIViews erstellen. Die drawRect Methode in den weiteren UIViews sieht wie folgt aus...

    Quellcode

    1. CGContextRef context = UIGraphicsGetCurrentContext();
    2. CGContextSetLineWidth(context, 2.0);
    3. CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
    4. CGRect rectangle = CGRectMake(0, 0, DISPLAYWIDTH, BARHEIGHT);
    5. CGContextAddRect(context, rectangle);
    6. CGContextStrokePath(context);
    7. CGContextSetFillColorWithColor(context, self.fillColor.CGColor);
    8. CGContextFillRect(context, rectangle);


    Nun würde ich diese UIView gerne mit dem Blendeffekt Multiply über das UIImageView laden. Wie mach ich das? Leider funktionierte bis jetzt keiner meiner Versuche. Habe das Gefühl das dem Blendeffekt die Hintergrundinformationen fehlen, auf die es gezeichnet werden soll, aber das ist nur eine Vermutung.


    Jedem UIView ist ein CGContextRef zugeordnet, in dem gezeichnet wird.
    Was Du jetzt verlangst ist, dass Deine unterschiedlichen UIViews den Modus untereinander benutzen.
    Das ist der falsche Ansatz: Du solltest den Modus setzen und in einer Instanz von UIView zeichnen.
    I would be embarrassed if they did not spy on me.
  • Andreas Grauel schrieb:

    Also versteh ich es richtig, das wenn ich die UIViews z.b. in einer ScrollView eingebettet habe, das ich in der ScrollView den BlendMode setze und dann in den UIViews weiterhin ganz normal zeichne?


    Ja, jedes UIView zeichnet sich selbst, und seine 'subviews', die sich dann wieder selbst zeichnen, mit ihrem eigenen Kontext.
    So, wie ich Dein Problem sehe, könnten CALayers eine Lösung sein.
    I would be embarrassed if they did not spy on me.
  • Leider bekomme ich das Problem nicht in den Griff ! :(
    Versuch es noch mal genau zu erklären.

    Es ist eine sehr kleine iOS Anwendung.
    Habe nur einen ViewController neben des MainWindows und dieser wird auch direkt im AppDelegate als View des Windows gestartet. Diese View hat als erste Ebene eine UIImageView als Hintergrund (320x460). Auf dieser View liegen verschiedene Labels und eine Scrollview. In der ScrollView sind noch weitere UIViews eingebettet. Diese UIViews sollen multipliziert über die Hintergrund UIImageView gelegt werden. Die Scrollview hat clearColor als Background Color. Wenn ich die ScrollView bouncen lassen sehe ich dahinter auch den Hintergrund.

    Habe nun schon mehrere Sachen probiert, aber leider komme ich zu keinem Erfolg. Ich bin mir leider auch schon unsicher in welcher Klasse ich die drawRect: Methode ändern muss. Habe leider noch nicht sehr viel mit Quartz2D gearbeitet, daher wird es für jemanden der schon mehr damit gemacht hat, wohl sehr einfach sein. Wäre super wenn ihr mir da noch mal's unter die Arme greifen könntet.