Je sais comment créer un NSImage
représentant un NSView
et tous ses sous-vues, mais ce que je suis après est une NSImage
d'une vue ignorant ses sous-vues. Je peux penser à des façons de le faire avec une sous-classe de NSView
, mais je tiens à éviter de sous-classer si possible. Quelqu'un a-t-il une idée?Faire une NSImage sur un NSView
Répondre
Masquer les sous-vues, saisir l'image, réafficher les sous-vues:
NSMutableArray* hiddenViews = [[NSMutableArray] alloc init];
for (NSView* subview in [self subviews]) {
if (subview hidden) [hiddenViews addObject: subview];
else [subview setHidden:YES];
}
NSSize imgSize = self.bounds.size;
NSBitmapImageRep * bir = [self bitmapImageRepForCachingDisplayInRect:[self bounds]];
[bir setSize:imgSize];
[self cacheDisplayInRect:[self bounds] toBitmapImageRep:bir];
NSImage* image = [[NSImage alloc] initWithSize:imgSize];
[image addRepresentation:bir];
for (NSView* subview in [self subviews]) {
if (![hiddenViews containsObject: subview])
[subview setHidden:NO];
}
Vous devriez rechercher les sous-visualisations qui sont déjà masquées et ne pas les afficher à la fin. –
Merci, code édité pour conserver l'état des sous-vues précédemment cachées. –
C'est une excellente idée - si simple, et pourtant cela ne m'aurait jamais été familier! –
Je vous suggère de faire une copie du NSView hors écran et de prendre un instantané de celui-ci.
Vous pouvez supprimer temporairement les sous-vues, créer l'image, et de mettre les sous-vues en arrière. Cela était simple, mais maintenant, avec la mise en page automatique, c'est un problème, car la suppression des sous-vues supprime également les contraintes qui les référencent. –
Je le ferais dans une application conçue pour m'aider à dépanner d'autres applications, donc le coup de performance associé à la suppression puis à la ré-ajout de contraintes n'est pas vraiment un gros problème - la priorité est une approche qui peut être appliquée à n'importe quelle vue hiérarchie. Si cette approche de suppression, puis de réinstallation peut être effectuée de manière fiable pour n'importe quelle vue, cela pourrait être la voie à suivre - je verrai jusqu'où je vais. –