Wie benutzerdefinierte zeichnen Fenster-Titelleiste in Objective-C?
Möchte ich die Art und Weise anpassen, die ich ziehen Sie die Titelleiste des Fensters auf OS X. Speziell möchte ich etwas tun, wie der Twitterrific-app, wo gibt es eine eigene Schaltfläche schließen, keine min/max-Schaltflächen und das Fenster Titel-text ist Rechtsbündig. Im Gegensatz zu Twitterrific, ich bin nicht auf der Suche, um benutzerdefinierte zeichnen das gesamte Fenster (obwohl ich bin nicht komplett dagegen ist).
Ich habe schon gesehen, das RoundWindow Probe auf Kakao Mit Liebe sowie die RoundTransparentWindow Beispiel von Apple bietet, aber weder angemessen scheint.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht möchten, verwenden Sie ein randloses Fenster-Klasse dann Sie können tun, ein paar Dinge.
Ersten, können Sie das schließen/min/max-buttons kaufen, mit
-[NSWindow standardWindowButton:]
. Sobald Sie die Schaltfläche positionieren Sie es/entfernen Sie es/etc...Können Sie die Titel durch festlegen der Titel zu
@""
. Dann können Sie fügen Sie einNSTextField
zu ziehen Sie Ihre eigenen Titel, indem Sie die folgenden[[[NSWindow contentView] superview] addSubview:textField]
.Dies ist wahrscheinlich der einfachste Weg, um Dinge zu tun.
Einen anderen Weg, dies zu tun ist, um die Ansicht anzupassen, das zeichnet alle Fenster-Titelleiste, etc...
NSWindow die content-view in einem "Design-Ansicht". Sie können eine Unterklasse der Design-Ansicht und machen Sie Ihre eigene Zeichnung. Das problem ist nur, dass die Design-Ansicht ist eine private Klasse, so müssen Sie vorsichtig sein.
cocoadev bietet einige weitere Details, wie am besten, um Ihre eigenen
NSWindow
Unterklasse, komplett mit einer Beschreibung der meisten die häufigsten Fallstricke.Den Kern es ist, erstellen Sie eine Unterklasse von
NSWindow
, und legen Sie seinestyleMask
zuNSBorderlessWindowMask
in der init-Methode:Beachten Sie, dass Sie sollten wahrscheinlich zurück JA für
canbecomeKeyWindow
um Ihre Fenster Verhalten sich wie normale Fenster.Können Sie dann erstellen Sie eine benutzerdefinierte NSView subclass, füllen Sie das gesamte Fenster mit einer Instanz der besagten Klasse, und dann führen Sie alle entsprechenden Fenster zeichnen von Rahmen, die benutzerdefinierte Ansicht.
Das ganze kann ein bisschen schmerzhaft. Sie haben zu re-implementieren die meisten normalen Fenster Verhaltensweisen, wie etwa die Größenänderung durch ziehen der rechten unteren Ecke.
Gibt es ein Beispiel für eine benutzerdefinierte Fenster-Umsetzung in die CoreData-Stickies Beispielprojekt.