Pregunta

Estoy intentando llamar la reflexión de una forma utilizando cacao. Ya he solicitado un NSAffineTransform y vuelto a trazar la forma con éxito, pero ahora no puedo encontrar la manera de dibujar una máscara alfa sobre ella. Estoy usando una operación NSCompositeDestinationOut, pero me está dando un resultado no deseado: alt text http: //img687.imageshack.us/img687/2417/capturedcran20100623094.png

No estoy exactamente seguro de cómo solucionar este problema - que necesito para que sea por lo que el gradiente de sólo actúa como una máscara alfa y no se muestra realmente . ¿Estoy utilizando el modo de composición mal?

Gracias! Aquí está el código de gradiente si es necesario:

- (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];
}
¿Fue útil?

Solución

Sí. He aquí un ejemplo del código que usamos para hacer esto. Utiliza una imagen de origen, y tiene un poco de negocios divertido con un factor de escala, pero debe ser capaz de utilizar la estructura básica y de composición opciones para hacer lo que necesita. (Este código se encuentra dentro del bloque [reflectionImage lockFocus], y yo es la NSImage que estamos haciendo el reflejo de.)

// 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];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top