Frage

Ich versuche, eine Form der Reflexion mit Kakao zu ziehen. Ich habe bereits eine NSAffineTransform und neu gezeichnet, die Form erfolgreich angewandt, aber jetzt kann ich nicht herausfinden, wie eine Alpha-Maske über sie zu zeichnen. Ich verwende eine NSCompositeDestinationOut Operation, aber es gibt mir ein unerwünschtes Ergebnis: alt text http: //img687.imageshack.us/img687/2417/capturedcran20100623094.png

Ich bin mir nicht ganz sicher, wie dies zu beheben - ich brauche es zu machen, damit die Steigung nur als Alpha-Maske wirkt und nicht tatsächlich angezeigt . Bin ich die falsche Compositing-Modus?

Danke! Hier ist der Gradient-Code bei Bedarf:

- (void)fadeOutRect:(NSRect)rect {
    [NSGraphicsContext saveGraphicsState];
    [[NSGraphicsContext currentContext] setCompositingOperation:NSCompositeDestinationOut];

    NSGradient *gradient = [[NSGradient alloc] initWithColorsAndLocations:
                            [[NSColor blackColor] colorWithAlphaComponent:0.5], 0.0,
                            [[NSColor blackColor] colorWithAlphaComponent:1.0], 0.8, nil];
    [gradient drawInRect:NSMakeRect(rect.origin.x, rect.origin.y + rect.size.height - ( PILL_HEIGHT * 2 ),
                                    rect.size.width, PILL_HEIGHT) angle:270];

    [NSGraphicsContext restoreGraphicsState];
}
War es hilfreich?

Lösung

Ja. Hier ist ein Beispiel für den Code, den wir verwenden, um dies zu tun. Es verwendet ein Quellbild, und hat ein bisschen komisch Geschäft mit einem Skalierungsfaktor, aber Sie sollten die Grundstruktur und die Wahlen Compositing nutzen können zu tun, was Sie brauchen. (Dieser Code ist in dem [reflectionImage lockFocus] Block, und selbst ist die NSImage, dass wir die Reflexion machen.)

// Draw our mask into the image
NSGradient* fade = [[NSGradient alloc] initWithStartingColor:[NSColor colorWithCalibratedWhite:1.0 alpha:0.5]
                                                 endingColor:[NSColor clearColor]];
[fade drawFromPoint:NSMakePoint(0.0, size.height)
            toPoint:NSMakePoint(0.0, 0.0)
            options:0];

// Composite the original image, upside-down
NSAffineTransform* flipper = [NSAffineTransform transform];
[flipper scaleXBy:1.0 yBy:-1.0];
[flipper concat];
[self drawInRect:NSMakeRect(0.0, -1.0*size.height, size.width, size.height)
        fromRect:NSMakeRect(0.0, 0.0, self.size.width, size.height / scaleFactor)
       operation:NSCompositeSourceIn fraction:1.0];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top