Question

Je suis en train de dessiner le reflet d'une forme en utilisant Cocoa. Je l'ai déjà appliqué une NSAffineTransform et redessiner la forme avec succès, mais maintenant je ne peux pas comprendre comment dessiner un masque alpha-dessus. J'utilise une opération de NSCompositeDestinationOut, mais il me donne un résultat non désiré: alt texte http: //img687.imageshack.us/img687/2417/capturedcran20100623094.png

Je ne suis pas sûr de savoir comment résoudre ce problème - je dois le faire de sorte que le gradient agit uniquement comme un masque alpha et n'est pas réellement affiché . Suis-je en utilisant le mode compositing ne va pas?

Merci! Voici le code de dégradé si nécessaire:

- (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];
}
Était-ce utile?

La solution

Yep. Voici un exemple du code que nous utilisons pour le faire. Il utilise une image source, et a un peu d'embrouilles avec un facteur d'échelle, mais vous devriez être en mesure d'utiliser la structure de base et les choix compositing pour faire ce que vous avez besoin. (Ce code est dans le [reflectionImage lockFocus] bloc, et l'auto est le NSImage que nous faisons le reflet 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];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top