Domanda

sto cercando di disegnare il riflesso di una forma utilizzando cacao. Ho già applicato un NSAffineTransform e ridisegnato la forma con successo, ma ora non riesco a capire come disegnare una maschera alfa su di esso. Sto utilizzando un'operazione NSCompositeDestinationOut, ma mi sta dando un risultato indesiderato: alt text http: //img687.imageshack.us/img687/2417/capturedcran20100623094.png

Non sono esattamente sicuro come risolvere questo problema - ho bisogno di farlo in modo che il gradiente agisce solo come una maschera alfa e non viene effettivamente visualizzato . Sto usando la modalità di composizione non va?

Grazie! Ecco il codice di pendenza, se necessario:

- (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];
}
È stato utile?

Soluzione

Sì. Ecco un esempio del codice che utilizziamo per fare questo. Si utilizza un'immagine di origine, e ha un po 'di divertente attività con un fattore di scala, ma si dovrebbe essere in grado di utilizzare la struttura di base e compositing scelte per fare quello che ti serve. (Questo codice è all'interno del [reflectionImage lockFocus] blocco, e l'auto è il NSImage che stiamo facendo il riflesso.)

// 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];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top