No se puede cambiar dinámicamente el tamaño de NSImageView

Tengo un NSImageView que incluye un NSImage generado dinámicamente. Cuando cambio la imagen que se muestra, me gustaría cambiar dinámicamente el tamaño de NSImageView para que envuelva con precisión la nueva imagen, y también cambiar el tamaño de la ventana adjunta para que el espacio entre NSImageView y cualquier otra parte de la ventana permanezca constante. (Tenga en cuenta que la escala de la vista de la imagen está configurada en ninguno, ya que quiero que su imagen siempre se muestre en su tamaño físico). Para ilustrar, suponga que comienzo con un imagen pequeña en mi vista de imagen. Si lo reemplazo por un imagen grande, deseo que tanto el NSImageView como la ventana adjunta cambien de tamaño para acomodarlo, sin afectar el tamaño o el espaciado de ningún otro elemento.

Actualmente, llamo al siguiente método cada vez que se cambia el nivel de ampliación mediante el paso a paso o el campo de texto asociado. Aunque regenerar la imagen y cargarla en NSImageView funciona bien, cambiar el tamaño de NSImageView y la ventana adjunta no.

- (void) updateMagnification:(NSUInteger)newMagnification {
    // Keep values of stepper and associated text field synchronized.
    [self.magnificationStepper setIntegerValue:newMagnification];
    [self.magnificationTextField setIntegerValue:newMagnification];

    // Regenerate image based on newMagnification and display in image view.
    [self.qrGenerator generateWithBlockPixelWidth:newMagnification];
    self.imageView.image = self.qrGenerator.image;

    // Adjust frame size of image view.
    NSLog(@"Old size: frame=%@ image=%@", NSStringFromSize(self.imageView.frame.size), NSStringFromSize(self.imageView.image.size));
    [self.imageView setFrameSize:NSMakeSize(self.imageView.image.size.width, self.imageView.image.size.height   )];
    NSLog(@"New size: frame=%@ image=%@", NSStringFromSize(self.imageView.frame.size), NSStringFromSize(self.imageView.frame.size));

    //[self.window setViewsNeedDisplay:YES];
    //[self.imageView setNeedsDisplay:YES];
    //[self.imageView.superview setNeedsDisplay:YES];
}

Independientemente de si aumento o disminuyo el valor de ampliación, haciendo que la imagen se haga más pequeña o más grande, el tamaño de NSImageView y de la ventana permanece constante. El tres setNeedsDisplay: las llamadas que están comentadas no tienen ningún efecto, incluso si no están comentadas; fueron mi intento de determinar si el problema estaba relacionado con los controles que no se volvían a dibujar una vez que se ajustaba su tamaño, pero las llamadas no tuvieron ningún efecto. curiosamente mi NSLog las llamadas indican que el marco de imageView realmente toma el tamaño solicitado, ya que producen este resultado:

2012-06-12 11:02:50.651 Presenter[4660:603] Old size: frame={422, 351} image={168, 168}
2012-06-12 11:02:50.651 Presenter[4660:603] New size: frame={168, 168} image={168, 168}

La pantalla real, por supuesto, no cambia.

Curiosamente, cambiar el estilo de marco de imageView a "ninguno", ya sea en Interface Builder o programáticamente con [self.imageView setImageFrameStyle:NSImageFrameNone], me da un comportamiento más cercano a lo que deseo. Hacer que la imagen sea más grande para que, de lo contrario, la vista de la imagen la recorte, hace que la vista de la imagen y la ventana crezcan. A partir de este punto, sin embargo, hacer que la imagen sea más pequeña no da como resultado que la vista de la imagen o la ventana cambien de tamaño en consecuencia. "Ninguno" es el único estilo de marco de imagen que muestra este comportamiento algo correcto: los cuatro estilos con borde (es decir, bisel [que es el predeterminado], botón, ranura y foto) muestran el mismo comportamiento completamente incorrecto descrito anteriormente.

Me encontré con alguien con un problema similar. Curiosamente, solo observó el comportamiento problemático cuando el estilo de marco de su vista de imagen se configuró en NSImageFrameNone, cuando este es el único valor que me da un comportamiento algo correcto. Intenté modificar el estilo del marco a un valor que no sea ninguno antes del cambio de tamaño y a ninguno después, ya que esto resolvió el problema de la otra persona, pero para mí, esto produjo el mismo comportamiento que cuando simplemente configuré el estilo del marco en "ninguno" inicialmente. .

Cualquier ayuda que proporcione será muy apreciada. ¡Gracias!

preguntado el 12 de junio de 12 a las 18:06

hola conseguiste alguna solucion a esto? Tampoco puedo cambiar lo que aparece NSImageView. -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.