iOS-Core-Grafik: Zeichnen Sie NUR die Schatten der CGPath
Ich bin zeichnen einer einfachen Pfad in iOS 5 mit Core Graphics:
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint( path, NULL, center.x , topMargin );
CGPathAddLineToPoint(path, NULL, center.x+20, topMargin+50);
CGPathAddLineToPoint(path, NULL, center.x , topMargin+40);
CGPathAddLineToPoint(path, NULL, center.x-20, topMargin+50);
CGPathAddLineToPoint(path, NULL, center.x , topMargin );
Möchte ich nun füllen Sie es in den Overlay-Modus etwa so:
[[UIColor colorWithRed:0 green:0 blue:0 alpha:0.4] setFill];
CGContextAddPath(context, path);
CGContextSetBlendMode (context, kCGBlendModeOverlay);
CGContextFillPath(context);
Gibt mir genau das erwartete Ergebnis. Aber ich möchte Nächstes erstellen Sie einen Reliefeffekt. Ich dachte, der mit einem weißen und einem schwarzen Schlagschatten zu erreichen, um diesen Effekt so:
[[UIColor colorWithRed:0 green:0 blue:0 alpha:0] setFill];
CGContextAddPath(context, path);
CGContextSetShadowWithColor(context, CGSizeMake(1, 1), 1.0, highlightColor);
CGContextSetBlendMode (context, kCGBlendModeNormal);
CGContextFillPath(context);
[[UIColor colorWithRed:0 green:0 blue:0 alpha:0] setFill];
CGContextAddPath(context, path);
CGContextSetShadowWithColor(context, CGSizeMake(-1, -1), 1.0, shadowColor);
CGContextSetBlendMode (context, kCGBlendModeNormal);
CGContextFillPath(context);
Das problem ist, die Schatten sind nicht gezeichnet, wenn alpha auf 0 gesetzt ist.
Nun die Frage: gibt es eine Möglichkeit zu zeichnen nur den Schatten, ohne die Füllfarbe aber die volle alpha? Kann ich irgendwie verhindern, dass die Innenseite von meinem Weg aus gezeichnet wird? Oder gibt es vielleicht eine einfachere Art und Weise der Zeichnung zwei Schatten für ein Pfad?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich schlage vor, Sie setzen den Rahmen Beschneidungspfad um die inverse von der Form Weg, konfigurieren Sie die Schatten, und füllen Sie die Form, die normalerweise mit voller Deckkraft. Der clipping-Pfad wird die Maske mit der Farbe füllen, und nur die Schatten bleiben würde.
Der trick besteht darin, mit
CGContextEOClip
und ein zusätzliches Rechteck Unterpfad zu setzen der clipping-Bereich auf das, was ist nicht bedeckt von dem ursprünglichen Pfad. Dies funktioniert für alle Pfade, die nicht selbst schneiden.CGContextEOClip
ist wirklich mächtig. Dass genau das Tat, was ich wollte, vielen Dank!