2013-08-23 221 views
1

我是新来的Obj-C /可可编程和面临有关NSImageView的问题。
我的目标是创建一个应用程序,允许用户通过拖拽&拖放图片。NSImageView调整大小与图像大小

问题是:当我们放大一个大于窗口的图像时,它会将窗口大小调整为图像大小,我不想那
我把我的NSImageView成NSScrollView所以只图像MUST的某一部分被显示,用户将移动滑块来查看整个一个(或简单地调整窗口的大小),这就是我想要的..

这里是我的厦门国际银行体系(相关部分):

  • 查看
    • NSScrollView
      • 查看
        • NSImageView


在我NSImageView的代码,我有(有关的问题):

[self setImageScaling:NSScaleProportionally]; 
[self setImage:newImage]; 


注意:滑块似乎移动视图,而不是像
NOTE2:我不能在窗口调整到较低的尺寸大于图像

+0

你是什么意思的“滑块似乎移动的观点,而不是形象”? –

+0

我的意思是当我滚动到顶部/底部时,我们可以看到视图正在移动,并自动返回到默认位置。 – Val

+0

好的。我得到你的问题。你所描述的内容听起来像是你的NSScrollView中的视图不够大。由于'clip子视图可能未启用,因此您仍然可以在其界限外看到NSImageView。原因是,为什么你可以滚动并返回到原来的位置是一个称为弹跳的功能,它是NSScrollView的一部分。你能否调试你的应用程序并检查'yournsimageview'和'yourscrollview.view'的大小。 –

回答

4

我有一个可怕的厌恶笔尖文件和喜欢尽可能以编程方式做事情,所以我没有太多的帮助......但是这里有一个小小的NSScrollview测试应用程序的列表,我最近编写了一些类似的东西。在这个代码块中提到的唯一非自包含的东西是window名称,它指的是已经创建的窗口的NSWindow *。而self这里只是指一个控制器对象。

​​

我知道这可能不是你正在寻找的解决方案,但也许它可以帮助你调试?特别是,除了给它一个框架,一个边界矩形和一个NSImage *之外,我没有对我的NSImageView做任何有趣的事情,所以我不认为你需要担心缩放参数本身 - 事实上,如果你想让图像成为全尺寸图像并滚动图像,您希望NSImageView的图像与图像尺寸相同,因此图像无法缩放。也许这是你的问题 - 框架太小? NSImageView框架可以比窗口大 - 这就是让你滚动的窗口。

+0

感谢您的回答,但我真的很想为该任务使用Interface Builder!并且用我的实际代码,我不确定我可以使用你的解决方案。 – Val

+1

关于Interface Builder的公平性不错,但希望你认识到,这几乎是创建一个NSScrollView所需的最小代码,它可以做你想做的事。 Interface Builder在后台执行的操作与此相同 - 您在Interface Builder中所做的所有设置和选择基本上只是告诉它在您的应用程序启动时执行此类代码。所以,如果你找不到一种方法使你的代码能够像这样工作,那么你的代码可能会有一些更基本的错误。 – Matt

+1

另一个原因是为什么我认为在这里尝试代码可能会更好(除了我不知道Interface Builder的头顶上的答案这个事实),IB有一百万个小复选框和设置埋在各种窗格中,如果你没有对它们全部进行检查和选择,选择恰到好处,事情可能无法按预期工作。然而,如果有人向您提供已知工作的代码,并将其粘贴进去,它应该仍然有效 - 您不必担心在某处错过了某个复选框,这会破坏您的应用程序。 – Matt

1

对我来说,这听起来像你的意见没有适当的大小。由于弹跳,并且因为您的视图不剪切它们的子视图,您仍然可以滚动一下,但它会返回到原来的位置。

  1. 检查NSImageView是否足够大以显示您的完整图像。 (检查框架或边界的宽度和高度)

    如果没有足够大的做这个(里面的方法,在这里设置新的图像):

    self.myImageView.frame = NSMakeRect(0.0,0.0, self.myImageView.image.size.width, self.myImageView.image.size.height);

  2. 调整大小的相应地滚动视图视图。

    self.myScrollView.view.frame = self.myImageView.frame;

现在您的滚动区域应足够大,以覆盖整个图像。

如果这对你有用,也可以给Matt一些功劳,通过提高他的答案,因为他的答案基本上是一样的东西 - 只有基于代码而不是使用nib文件初始化所有内容 - 和代码我用的和他已经发布的非常相似。

+0

非常感谢您的'myScrollView.view'(忘记使用“内部”视图)!别担心,他从StackOverflow开始,我将在这里给他的每个答案+1,因为这也是很好的答案:)! – Val