2013-08-23 223 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