无法动态调整NSImageView的大小

时间:2012-06-12 17:36:11

标签: cocoa nsimage nsimageview

我有一个NSImageView,它包含一个动态生成的NSImage。当我更改显示的图像时,我想动态调整NSImageView的大小,以便精确地包装新图像,并且还要调整封闭窗口的大小,以便NSImageView和窗口的其他部分之间的空间保持不变。 (请注意,图像视图的缩放比例设置为无,因为我希望其图像始终以其物理大小显示。)为了说明,假设我以small image in my image view开头。如果我用large image替换它,我希望NSImageView和封闭窗口都可以调整大小以适应它,而不会影响任何其他元素的大小或间距。

目前,每当通过步进器或相关文本字段更改放大级别时,我都会调用以下方法。虽然重新生成图像并将其加载到NSImageView中可以正常工作,但是调整NSImageView和封闭窗口的大小不会。

- (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];
}

无论是增大还是减小放大倍数值,导致图像变小或变大,NSImageView和窗口的大小都保持不变。被注释掉的三个setNeedsDisplay:调用即使被取消注释也没有任何效果 - 它们是我尝试确定问题是否与控件的大小调整后不重绘相关,但调用没有影响。奇怪的是,我的NSLog调用表明imageView的帧确实采用了请求的大小,因为它们产生了这个输出:

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}

实际显示当然不会改变。

有趣的是,无论是在Interface Builder中还是以编程方式[self.imageView setImageFrameStyle:NSImageFrameNone]将imageView的帧样式更改为“none”,都会让我的行为更接近我想要的行为。使图像变大以便否则将被图像视图剪切确实导致图像视图和窗口变大。但是,从这一点来看,使图像变小不会导致图像视图或窗口相应地调整大小。 “无”是唯一显示这种有点正确行为的图像框架样式 - 所有四种边框样式(即斜角[默认],按钮,凹槽和照片)显示上述完全不正确的行为。

我遇到了someone with a similar problem。奇怪的是,当他的图像视图的框架样式设置为NSImageFrameNone时,他只观察到有问题的行为,这是唯一能给我一些正确行为的值。我尝试在调整大小之前将帧样式修改为非none值,之后没有修改,因为这解决了另一个人的问题,但对我来说,这产生了与我最初将帧样式设置为“none”时相同的行为

我们非常感谢您提供的任何帮助。谢谢!

0 个答案:

没有答案