Bir mac uygulaması üzerinde çalışıyorum ve artı işareti ile yeşil düğmeye bastığınızda olduğu gibi, başlangıç penceresinin en yüksek duruma getirilmesini seviyorum. Tam ekran olmasını istemiyorum.OSX Uygulaması: Pencere nasıl en üst düzeye getirilir?
cevap
Sen "uzaklaştırma" olabilir hedef çerçeve olarak NSScreen en visibleFrame
kullanarak maksimum kullanılabilir alan bir pencere. Örneğin
if let screen = NSScreen.mainScreen() {
window.setFrame(screen.visibleFrame, display: true, animate: true)
}
, AppDelegate.swift içinde: en window
söyleyin NSWindow IBOutlet olduğunu Let
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
func applicationDidFinishLaunching(aNotification: NSNotification) {
if let screen = NSScreen.mainScreen() {
window.setFrame(screen.visibleFrame, display: true, animate: true)
}
}
yakınlaştırılmış haliyle bir uygulama ile aynı şey değil "maksimize". Yeşil artı simgesi yakınlaştırmayı gösterir, yani "bu içerik için uygun boyut" anlamına gelir. Bazı uygulamalarda görünen çerçeve (Eric D.'nin tartıştığı gibi), ama neredeyse her şey olabilir. Örneğin bir Safari penceresini yakınlaştırmayı deneyin.
Gerçekten, daha sonra Eric doğru yolda "maksimize" değil "zoom" istiyorum varsayarsak, ama daha iyi yapılabilir. Öncelikle, pencerenin ekranını bir tane varsa kullanmalısınız. Ayrıca, başlatma sırasında pencereyi yeniden boyutlandırmamalısınız (lansman sırasında bu durum garip görünebilir).
func applicationDidFinishLaunching(aNotification: NSNotification) {
if let screen = window.screen ?? NSScreen.mainScreen() {
window.setFrame(screen.visibleFrame, display: true)
}
}
Sen uygulama temsilci koyarak yerine bu yönetmek için bir NSWindowController
kullanarak düşünebilirsiniz. Bu durumda, bunu windowDidLoad
'a ekleyebilirsiniz. Pencere denetleyicileri, AppKit'te oldukça yaygın bir araçtır (tarihsel olarak yaygın olmayan denetleyicileri görüntülemek yerine). Aslında, davranış Büyütmek NSWindowDelegate
yöntemle windowWillUseStandardFrame(_:defaultFrame:)
yakından tanımak istiyorsanız
. Genel olarak zoom(_:)
'u doğrudan başlatmaya çağırmamalısınız, çünkü bu animasyon canlandıracak, ancak delegede yaptığınız mantık, çerçevenizi hesaplamak için kullanılmalıdır. Yine, çerçevenizi ana ekran yerine bir tane varsa pencerenin ekranında yaşamak için ayarladığınızdan emin olun.
İdeali, gerçekten kullanıcı görünür çerçeveye onu zorlamak yerine kullanılan son kareyi onurlandıran edilmelidir. Daha fazla araştırmak istiyorsanız, buna Cocoa'da frameAutosave
denir. Bir pencere denetleyicisi, Arayüz Oluşturucu'da bir otomatik kaydetme adı ayarladıysanız bunu otomatik olarak yönetmenize yardımcı olacaktır. (Görünür çerçeveyi elde etmek için ilk başlatımda kareyi hesaplamaya gereksinim duymak biraz karmaşık olsa da, tamamen otomatik olmayacaktır.)
Varsayılan çerçevenizi görünür çerçeve haline getirmeden önce dikkatli bir şekilde düşünün. vaka. Bu, büyük monitörlerde gerçekten çok büyük olabilir (orada hala 30 tane "Sinema gösterileri var, ama 27'de bile" oldukça bunaltıcı olabilir). Bazen uygulamanıza bağlı olarak iyi olur, ancak sık sık başlangıç boyutunun belirlenmesini (kullanıcının daha büyük yapmasına izin verirken) belirlemeyi tercih ederim.
Merhaba Guys Yardımın için minnettarım.
Belge tabanlı bir mac uygulaması üzerinde çalışıyorum. Belge sınıfının makeWindowControllers() 'ında sağladığınız kodu koydum ve bir çekicilik gibi çalışıyor.
Çok teşekkür ederim. İşte kullandığım kod.
override func makeWindowControllers() {
// Returns the Storyboard that contains your Document window.
let storyboard = NSStoryboard(name: "Main", bundle: nil)
let windowController = storyboard.instantiateControllerWithIdentifier("Document Window Controller") as! NSWindowController
self.addWindowController(windowController)
if let screen = NSScreen.mainScreen() {
windowController.window?.setFrame(screen.visibleFrame, display: true, animate: true)
}
}
Üzgünüm, mac dünyasında çok yeniyim. Ben sadece bu kodu NSViewController: viewDidLoad 'a koydum ve çalışmıyor, bu kodu tam olarak nereye koyacağımı söyleyebilirsiniz.Bu benim kodum = ekran görüntüsü = NSScreen.mainScreen() { self.view.window? .setFrame (screen.visibleFrame, görüntü: true, animate: true) } –
Yanıtımı bir örnekle güncelleştirdim. – Moritz
Hızlı Güncelleme 3: '.mainScreen()' i '.main()' ile değiştirin. – Moritz