Dans un projet sur lequel je travaille, j'ai 3 images: haut, milieu et bas. Le haut et le bas sont à hauteur fixe, et le milieu doit être répété entre les deux. (La taille de la fenêtre va changer.) Ils sont tous teintés d'une couleur provenant des préférences de l'utilisateur, puis doivent avoir leur ensemble alpha en utilisant une valeur des préférences.Répéter un NSImage semi-transparent
Je peux faire à peu près tout. La partie sur laquelle je suis coincé est le dessin du milieu. J'ai décidé d'utiliser [NSColor +colorWithPaternImage:]
serait la chose la plus facile à utiliser. Il y a beaucoup de code qui fait les images et les couleurs, donc supposons qu'ils existent et ne sont pas nuls.
int problem; // just to help explain things
float alpha;
NSImage *middleTinted;
NSRect drawRect = [self bounds];
drawRect.size.height = self.bounds.size.height - topTinted.size.height - bottomTinted.size.height;
drawRect.origin.y = topTinted.size.height;
NSColor* colorOne = [NSColor colorWithPatternImage:middleTinted];
NSColor* colorTwo = [colorOne colorWithAlphaComponent:alpha];
if(problem == 1)
{
[colorOne set];
}
else if(problem == 2)
{
[colorTwo set];
}
[NSBezierPath fillRect:drawRect];
En supposant problem == 1
, il dessine l'image correcte, au bon endroit et avec la taille correcte, mais pas alpha. (Évidemment, puisque je n'en ai pas spécifié un.)
Quand problem == 2
, je m'attendrais à faire la même chose, mais avoir la bonne valeur alpha. Au lieu de cela, je reçois une boîte noire.
Existe-t-il une solution qui répètera l'image avec l'alpha correct? Je pense que je pourrais dessiner l'image manuellement en boucle, mais je préférerais une solution plus raisonnable si elle existe.
La deuxième solution était celle que j'ai commencé à utiliser, mais 'NSDrawThreePartImage' fonctionnait bien et c'est évidemment une meilleure solution que la mienne. Merci! –