簡體   English   中英

改變Cocoa的窗口大小?

[英]Change size of window in Cocoa?

我有一個窗口,當用戶點擊它時我需要更改它的大小。 我正在使用[self setFrame:windowFrame display:YES animate:YES]來完成此任務。

即使窗口成功地改變了大小(我增加了它的高度),它也會向上移動窗口的內容。 我該如何防止這種情況發生? 我希望內容保持不變。

我在OSX Mountain Lion上使用Objective-C和Cocoa為OSX開發應用程序。

編輯:約束和/或彈簧和Struts將無法工作,因為我需要在調整窗口大小后移動內容。

如果您使用Interface Builder來構建這些視圖,那么我認為一種方法是設置“struts和spring”。 這些在“尺寸檢查器”下可用,並且是“自動調整”標簽上方的紅色箭頭和條形。 玩這些以獲得您想要的效果,但一般的想法是箭頭控制視圖的大小如何調整父視圖的大小的變化,並且條控制視圖的邊緣的關系隨着大小的變化,到父視圖的邊緣。

約束和/或Springs和Struts不起作用,因為我需要在調整窗口大小后移動內容。

在這種情況下,您應該使用NSViewAnimation

單個視圖動畫實際上可以對多個視圖執行多個動畫,您甚至可以對窗口執行一個動畫,盡管類的名稱和窗口不是Cocoa中的視圖這一事實。

使用initWithViewAnimations:創建一個視圖動畫,它采用一系列字典 每個字典標識目標( NSViewAnimationTargetKey )以及如何處理它:更改目標的幀( NSViewAnimationStartFrameKeyNSViewAnimationEndFrameKey )或淡入或淡出目標( NSViewAnimationEffectKey )。 對於您的情況,您將更改目標的框架。

當用戶執行導致窗口大小調整的事物時,您需要計算窗口所需的整體大小(注意調整其框架的位置,使其不會在屏幕上生長),以及新視圖 - 視圖的位置和大小。 將移動和/或改變大小的所有內容,為其創建字典並將其放入數組中。 然后創建視圖動畫。

NSViewAnimation是一種NSAnimation ,它提供了啟動和停止動畫,監視其進度,掛鈎動畫以及將多個NSAnimations鏈接在一起的所有方法。 如果沒有別的,你需要開始動畫

在基於約束的布局中,將窗口邊緣周圍的視圖設置為與其超視圖邊緣的固定距離。

Xcode將從中推斷出很多可恢復性; 如果仍然沒有正確調整大小,請調整其約束,使其寬度和/或高度不再恆定。

最簡單的方法是移動視圖,直到編輯器中出現藍線。 每條藍線對應於HIG中關於事物應該如何顯示的規則,如果您將視圖放在那里,Xcode將創建符合這些准則的約束。 例如,如果您將視圖從其超級視圖的右邊緣設置了20個點,那么您將獲得一條藍線,如果您將視圖放在那里,您將創建一個約束,該視圖必須保持該視圖的距離那邊緣。

superview不是唯一可以創建基於HIG的約束的視圖。 您還可以在兄弟視圖之間創建指南約束。 例如,如果您將一個按鈕放在另一個按鈕旁邊的適當距離處,那么您將在該距離上獲得一條藍線,如果您放下它,您將創建一個約束,即這兩個按鈕必須與每個按鈕保持距離。其他。

如果你想做一些真正自定義的東西,nib編輯器右下角的三個按鈕可以讓你創建你想要的任何約束。 您選擇的內容決定了您可以創建的約束; 筆尖編輯器的大綱視圖將幫助您確保獲得所需的選擇。

您將不得不遍歷所有子視圖並根據窗口框架的增量更改其框架位置。

因此,如果您在所有方向上將窗口框架擴展20,則所有子視圖都必須將其框架位置增加(20,20)以抵消窗口移動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM