Bonjour.
J'ai un petit problème pour zoomer une image que j'ai affiché dans une NSView. J'ai essayé plein de méthodes différentes, mais j'arrive pas à obtenir de résultat correct. Avec le code affiché dessous, le frame de l'image semble s'aggrandir, mais pas l'image, résultat, j'ai un fond blanc en haut et à droite de mon image.
Voici le code de ma vue :
carte est mon image, frameChanged est appelé lorsque la fenêtre est redimensionnée, pour que l'image reste toujours au centre.
Une idée ?
J'ai un petit problème pour zoomer une image que j'ai affiché dans une NSView. J'ai essayé plein de méthodes différentes, mais j'arrive pas à obtenir de résultat correct. Avec le code affiché dessous, le frame de l'image semble s'aggrandir, mais pas l'image, résultat, j'ai un fond blanc en haut et à droite de mon image.
Voici le code de ma vue :
Bloc de code:
- (void)frameChanged:(NSNotification *)toto
{
if(carte)
{
NSSize tailleImage=[carte size];
NSRect limites=[[self superview] frame];
NSSize tailleFrame=limites.size;
NSPoint p2;
float x,y;
if(tailleImage.width<limites.size.width) x=((limites.size.width-tailleImage.width)/2);
else x=0;
if(tailleImage.height<limites.size.height) y=((limites.size.height-tailleImage.height)/2);
else y=0;
imageOrigin.x=x;
imageOrigin.y=y;
NSRect nouveauBounds;
p2.x=0;
p2.y=0;
nouveauBounds.origin=p2;
nouveauBounds.size=tailleImage;
nouveauBounds.size.width=(nouveauBounds.size.width+imageOrigin.x);
nouveauBounds.size.height=(nouveauBounds.size.height+imageOrigin.y);
[self setBounds:nouveauBounds];
[self setFrame:nouveauBounds];
[self setNeedsDisplay:YES];
}
}
- (void)drawRect:(NSRect)rect
{
if(carte)
{
[self frameChanged:nil];
[carte compositeToPoint:imageOrigin operation:NSCompositeCopy];
}
}
- (void)afficherCarte:(NSImage *)nouvelleImage
{
[nouvelleImage retain];
[carte release];
carte=nouvelleImage;
zoomCarte=1;
tailleOrigineCarte=[carte size];
[self frameChanged:nil];
[self setNeedsDisplay:YES];
}
- (void)setZoomCarte:(float)zoom
{
zoomCarte=zoom;
NSAffineTransform *at = [NSAffineTransform transform];
[at scaleBy:zoom];
[carte setSize:[at transformSize:tailleOrigineCarte]];
[carte setScalesWhenResized: YES];
[self frameChanged:nil];
[self setNeedsDisplay:YES];
}
carte est mon image, frameChanged est appelé lorsque la fenêtre est redimensionnée, pour que l'image reste toujours au centre.
Une idée ?