我是Obj-C / Cocoa编程的新手,面对NSImageView的问题。
我的目标是创建一个应用程序,允许用户通过拖放操作在其上放置图像。
问题如下:当我们丢弃的图像大于窗口时,它会将窗口大小调整为图像大小,我不希望! 我将我的NSImageView放入NSScrollView中,因此只显示图像的某一部分必须,用户将移动滑块以查看整个(或简单地调整窗口大小),这就是我想要的...
这是我的XIB层次结构(相关部分):
在我的NSImageView的代码中,我(关于那个问题):
[self setImageScaling:NSScaleProportionally];
[self setImage:newImage];
注意:滑块似乎移动视图而不是图像
NOTE2 :我无法将窗口调整为比图像小的尺寸
答案 0 :(得分:4)
我对nib文件有一种可怕的厌恶,并且喜欢在可能的情况下以编程方式执行操作,所以我对此没什么帮助...但是这里有一个小的NSScrollview测试应用程序列表,我最近编写了类似的东西。此代码块中提到的唯一非自包含的东西是window
名称,它指的是已创建的窗口的NSWindow *
。而self
这里只是指控制器对象。
NSImage * myImage = [NSImage imageNamed:@"myfilename.png"];
NSRect imageRect = NSMakeRect(0.0,0.0,myImage.size.width,myImage.size.height);
self.myImageView = [[NSImageView alloc] initWithFrame:imageRect];
self.myImageView.bounds = imageRect;
self.myImageView.image = myImage;
self.myScrollView = [[NSScrollView alloc] initWithFrame:[window.contentView frame]];
self.myScrollView.hasVerticalScroller = YES;
self.myScrollView.hasHorizontalScroller = YES;
self.myScrollView.documentView = self.myImageView;
self.myScrollView.borderType = NSNoBorder;
self.myScrollView.scrollerStyle = NSScrollerStyleOverlay;
window.contentView = self.myScrollView;
我知道这可能不是您正在寻找的解决方案,但也许它可以帮助您调试?特别是,除了给它一个框架,一个边界矩形和一个NSImageView
之外,我没有对我的NSImage *
做任何有趣的事情,所以我认为你不需要担心每个缩放参数事实上,如果你想让图像全尺寸并滚动它,你希望你的NSImageView
的框架与图像的尺寸相同,这样它就无法扩展一点都不也许那是你的问题 - 框架太小了? NSImageView帧可以比窗口大 - 这就是让你滚动它的原因。
答案 1 :(得分:1)
对我而言,听起来你的观点没有合适的尺寸。由于弹跳并且因为您的视图没有剪切其子视图,您仍然可以滚动一点,但它会返回到其原始位置。
检查NSImageView是否足以显示完整图像。 (检查宽度和高度的框架或边界)
如果它不够大(在设置新图像的方法内):
self.myImageView.frame = NSMakeRect(0.0,0.0, self.myImageView.image.size.width, self.myImageView.image.size.height);
相应地调整滚动视图视图的大小。
self.myScrollView.view.frame = self.myImageView.frame;
现在,您的可滚动区域应足够大,以覆盖整个图像。
如果这对您有用,也可以通过对他的答案进行投票来给予Matt一些信任,因为他的回答基本上是相同的 - 只有基于代码的,而不是使用nib文件初始化所有内容 - 以及我使用的代码与他已发布的代码非常相似。