スマートフォン用の表示で見る

YOKOHAMA スタッドレス ice GUARD FIVE IG50 PLUS 205/60R16 & JOKER MASTER2 16×6.5 114.3/5H + 40 セドリック Y34 系今だけ値引中

YOKOHAMA スタッドレス ice GUARD FIVE IG50 PLUS 205/60R16 & JOKER MASTER2 16×6.5 114.3/5H + 40 セドリック Y34 系今だけ値引中

NSWindowのタイトルバーをカスタマイズする

人類の多年の夢であったNSWindowのタイトルバーのカスタマイズであるが、YosemiteになってついにオフィシャルなAPIが実装された。


YosemiteではApple製のアプリケーションほとんどにおいてデザインが一新され、かつてOS Xを特徴付けていたツルッとしたテクスチャは取り払われた。そしてウインドウのタイトルバーまでもが変わった。

タイトルバー

ウインドウのタイトルバーは、OS XにおいてGUIアプリケーションの要である。タイトルバー自体がウインドウを移動するためのノブであり、左にはウインドウを操作するための赤・黄・青のコントロールが、中央にはウインドウのタイトルが表示される。ときにはツールバーと見かけ上くっついたりするが、いずれにしてもウインドウの中心はタイトルバーである。

Safariのタイトルバーにはツールバーが表示されている

そのタイトルバーをカスタマイズしたい、これは全人類が生まれながらに持っている当然の欲求である。。そして、しかし、Appleは長年にわたってそういったAPIを提供してこなかった。ウインドウをウインドウたらしめるタイトルバーを、心ないデベロッパーが欲望のままに毀損することを許さないというように、禁断の果実を決して手放そうとはしなかった。それがYosemiteになって、Apple製のアプリケーションでさえ、一般的なタイトルバーのルールを破壊した。いまやタイトルバーには信号機のようなコントロールを残して、タイトルの代わりにツールバーが表示されたり、あるいはウインドウのコンテンツがそのまま表示されるようになった。これはいまやAppleだけの特権ではなく、ついにAPIが提供されたのである。

リマインダーのタイトルバーはコンテンツと重なる

タイトルを非表示にする

OS X 10.10 YosemiteからNSWindowに新しく追加されたプロパティvar titleVisibility: NSWindowTitleVisibilityを使うと、ウインドウのタイトルを非表示にできる。enum NSWindowTitleVisibilityは以下のように二つの値からなる。

enum NSWindowTitleVisibility : Int {
 case Visible
 case Hidden
}

デフォルトは.Visibleであるが、ここでヘッダから.Hiddenのコメントを引用する。

The always hidden mode hides the title and moves the toolbar up into the area previously occupied by the title.

NSToolbarがある場合にはタイトルがあった場所に移動するようだ 。これによって、例えばSafariやカレンダーのように、タイトルバーの高さが少し高く、信号機のようなコントロールのすぐ右にツールバーがあるようなウインドウが作れる。NSWindowNSToolbarを設定して、あとは以下のようなコードをNSWindowControllerfunc windowDidLoad()などに実装する。

window?.titleVisibility = .Hidden

単にツールバーを置いたウインドウ

ツールバーを置いてtitleVisibility = .Hiddenとしたウインドウ

タイトルバーを装飾する

OS X 10.10 YosemiteではNSViewControllerが大幅に強化され、iOSUIViewControllerから多くの思想を受け継いだ。そして同時にNSViewControllerのサブクラスがいくつか追加された。その一つがNSTitlebarAccessoryViewControllerである。

NSTitlebarAccessoryViewControllerは、その名前が示す通り、タイトルバーを装飾するViewのControllerである。このViewControllerのviewプロパティが返すViewが、NSWindowのタイトルバーに表示される。合わせてNSWindowにも以下のようなプロパティやメソッドが追加されている。

var titlebarAccessoryViewControllers: [AnyObject]
func addTitlebarAccessoryViewController(childViewController: NSTitlebarAccessoryViewController)
func insertTitlebarAccessoryViewController(childViewController: NSTitlebarAccessoryViewController, atIndex index: Int)
func removeTitlebarAccessoryViewControllerAtIndex(index: Int)

NSWindow複数NSTitlebarAccessoryViewControllerを順序付きで管理する。タイトルバーの中でどの部分に表示されるのかは、NSTitlebarAccessoryViewControllerの持つvar layoutAttribute: NSLayoutAttributeというプロパティで決定される。ただし現在の所NSLayoutAttributeのうち有効な値は.Bottom.Rightのみであることがヘッダに書かれている。もちろんそれぞれに対応する位置は、タイトルバーの下と右である。

実際に表示するには以下のようなコードを、例えばNSWindowControllerfunc windowDidLoad()に実装する。NSTitlebarAccessoryViewControllerインスタンスはStoryboardから生成している。

let accessory = storyboard?.instantiateControllerWithIdentifier("TitlebarAccessory") as NSTitlebarAccessoryViewController
accessory.layoutAttribute = .Right
window?.addTitlebarAccessoryViewController(accessory)

layoutAttribute = .BottomNSTitlebarAccessoryViewControllerを設定したウインドウ

layoutAttribute = .RightNSTitlebarAccessoryViewControllerを設定したウインドウ

コンテンツをタイトルバーの領域まで拡げる

タイトルバーの位置までウインドウのコンテンツを表示するために、新たにvar titlebarAppearsTransparent: Boolプロパティと、NSFullSizeContentViewWindowMask定数が用意された。

titlebarAppearsTransparentはタイトルバーの背景を透明にするかどうかを表す。NSFullSizeContentViewWindowMaskは、NSWindowvar styleMask: Intプロパティに利用する定数で、タイトルバーの領域までをコンテンツの領域とすることを表現するものである。

NSFullSizeContentViewWindowMaskNSScrollViewの組み合わせによって、タイトルバーの下にコンテンツが透けるような表現が可能になる 。またNSFullSizeContentViewWindowMaskを設定した上でtitlebarAppearsTransparentを真にすると、信号のようなコントロールだけのウインドウが作れるのだ。

window?.titleVisibility = .Hidden
window?.styleMask |= NSFullSizeContentViewWindowMask
window?.titlebarAppearsTransparent = true

タイトルバーの部分までNSSplitViewのコンテンツを表示させるようにしたウインドウ

伝統的手法

有史以来、NSWindowのタイトルバーをカスタマイズすると言えば大きく二つの方法があり、ひとつはウインドウのコントロールまで完全に自作して自由に表示する方法、そしてもうひとつはwindow.contentView.superviewという風にNSWindowの実装に依存してビューの階層を辿る方法である。現実的には主に後者が利用されることが多かったのではないだろうか。(NSThemeFrameなどで検索するとそういった方法を指し示すページが今も見つかるだろう。)

しかしOS X 10.10 Yosemiteでは、このビューの階層を辿る方法を使っていると"NSWindow warning: adding an unknown subview:"というログが出力されるようになり、代わりにオフィシャルな方法が提供されることになった。このことはAppKitのリリースノートに記載されている。

まとめ

ここまでで、OS X 10.10 Yosemiteから追加されたAPIによって、柔軟にタイトルバーをカスタマイズできることがわかった。これらはもちろん組み合わせることもできる。例えばSafariでは、titlebarAppearsTransparent = trueとした上でlayoutAttribute = .BottomNSTitlebarAccessoryViewControllerを設定しているかもしれない。

SafariのようにtitlebarAppearsTransparent = trueかつlayoutAttribute = .BottomNSTitlebarAccessoryViewControllerを設定したウインドウ

また昨今噂されるUXKitでは、UXNavigationControllerなどUIKit由来の機能が存在するらしい。

。これらのNSWindowの新しいAPIを使って、例えばUINavigationBar相当の機能をタイトルバーに押し込めることもできるのではないだろうか。

まだ見ぬOS X 10.11への期待を膨らませつつ、読者諸氏もNSWindowのタイトルバーをカスタマイズしてみてほしい。こちらからは以上だ。


スターをつけました

引用をストックしました

引用するにはまずログインしてください

引用をストックできませんでした。再度お試しください

限定公開記事のため引用できません。

YOKOHAMA スタッドレス ice GUARD FIVE IG50 PLUS 205/60R16 & JOKER MASTER2 16×6.5 114.3/5H + 40 セドリック Y34 系今だけ値引中

BRIDGESTONE (ブリヂストン)BLIZZAK REVO GZ 175/60R14 スタッドレスタイヤ ブリザック レボ ジーゼット,スタッドレスタイヤ TOYO TIRES DELVEX M934 205/70R17.5 115/113L バン・トラック用 ★スタッドレスタイヤ★ BRIDGESTONE BLIZZAK VRX 205/70R15 96Q ブリヂストン ブリザック 冬タイヤ,冬用タイヤ新品 15インチ 国内メーカー. GEOLANDAR I/T-S G073 【 185/85R16 105/103L】 1本価格  4X4 ヨコハマ ジオランダースタッドレス 185/85-16 ジムニー,ヨコハマ ジオランダー I/T-S G073 255/55R18 109Q XL 【スタッドレスタイヤ】【4WD SUV】【タイヤ交換可】【東京都】【18インチ】【255-55-18】 1005_flash ダンロップ ウィンターマックス LT03 205/75R16 113/111L 【スタッドレスタイヤ】【小型トラック】【タイヤ交換可】【東京・池袋・サンシャイン近く】【16インチ】【205-75-16-113】 1005_flash, [205/45R17]GOODYEAR / ICE NAVI ZEA スタッドレス [2/-][LA STRADA / TIRADO @ (SL) 17インチ],【スタッドレスタイヤ ホイールセット 新品 4本SET】 ダンロップ ウインターマックス01 205/65R16 (205-65-16) ウェッズ レオニスシリーズ 【バランス調整済み!】 【スタッドレスタイヤ&ホイール4本セット】 【タイヤ】ブリヂストン ブリザック レボGZ 215/60R17 96Q [BLIZZAK] 【ホイール】スタッグ 17×7.0 PCD114/5H +38/+48/+53 [シュナイダーStaG]. ボルボ S60 RB系用 スタッドレス ミシュラン エックスアイス XI3 215/55R16 97H XL & OZ MSW 85 セミグロスブラック タイヤホイール4本セット,スタッドレスタイヤ ヨコハマ アイスガードファイブ プラス iG50 225/45R18 91Q & レオニス ナヴィア 05 MBP 8.0-18 タイヤホイール4本セット 225/45-18 YOKOHAMA iceGUARD 5 PLUS iG50 215/50R17 91Q ファルケン/ESPIA EPZ F [2] ■LEONIS GREILA 17×7.0 114.3/5H +53 カラー:BKMC Weds スタッドレス&ホイール4本(1台分)セット, 【送料無料 ボルボ(V40)】 BRIDGESTONE ブリヂストン ブリザック VRX 205/50R17 17インチ スタッドレスタイヤ ホイール4本セット 輸入車 TECMAG TYPE 206R 7J 7.00-17,[225/55R18]MICHELIN / X-ICE XI3 スタッドレス [2/-][BEST / VOLTEC EXTREME TERA (BKDC) 18インチ] DUNLOP WINTER MAXX 01 225/50R18MANARAY VERTEC VR-5 SP-LINE 18 X 7 +55 5穴 114.3. 【17インチ】単品set 【日本製★国産 ベクター4シーズン】215/55R17【JP STYLE UNI FIVE SP】7.0J-17inch 5穴 PCD114.3 in38 NI-21HEX M12×P1.25ジューク(F15系)、ステージア(M35系)等にお勧めオールシーズンタイヤ 1輪分セット 2155517,【16インチ】単品set 【日本製★国産 ガリットGIZ】205/55R16【Razee AP】6.5J-16inch 5穴 PCD100 in45 FJ-19HEX M12×P1.25インプレッサ(G4、スポーツ)、レガシィB4・ツーリングワゴン等にお勧めスタッドレスタイヤ 1輪分が激安! 205/55/16 【14インチ】【INTERSTATE D30】165/70R14【ZACK JP-112】4.5J-14inch 4穴 PCD100 in45 SZ-17HEX M12×P1.25Kei(ワークス、スポーツ)、ラピュタ等にお勧め新品 スタッドレス 1台分が格安! 165/70R14, ブリヂストン ブリザック VRX 2016年製 185/65R15WEDS Leonis_NAVIA02 15 X 5.5 +43 4穴 100,【スタッドレスタイヤ&アルミホイールセット】 ノート E12 CDS1(クリエイティブ ディレクション) 1555+43 4-100 ガンメタ 【ブリヂストン/BRIDGESTONE】 VRX 185/65R15 純正15インチ ダンロップ スタッドレス ウインターマックス WM01 205/55R16 & ジョーカーストレート 16×6.5 114.3/5H + 47 プレマシー CR3W / CREW. スタッドレスタイヤ ブリヂストン ブリザック レボ GZ 195/60R16 89Q & スマック プライムシリーズ バサルト 6.5-16 タイヤホイール4本セット 195/60-16 BRIDGESTONE BLIZZAK REVO GZ,【16インチ】 スタッドレスセット 215/55R16 【日本製★国産 ガリットGIZ】6.5J-16inch 5穴 PCD100 in48【ZACK JP-812】WISH(ZGE22W系)等にお勧め TY-21HEX M12×P1.50 4本セット 1台分が激安! 215-55-16 【スタッドレスタイヤ&アルミホイールセット】 MPV TNC24 CDS1 1560+53 5-114 ガンメタ 【グッドイヤー/GOODYEAR】 NAVI ZEA2 205/65R15 純正15インチ. DUNLOP WINTER MAXX 02 195/60R16HotStuff 軽量!G.speed G-02 16 X 6.5 +53 5穴 114.3,215/70R16 100Q ブリヂストン/BLIZZAK DM-V2 [2] ■SPARROW 16×6.5 114.3/5H +38 カラー:NGM SMACK スタッドレス&ホイール4本(1台分)セット 185/65R15 88Q ダンロップ/WINTER MAXX 02 [2] ■CREATIVE DIRECTION CDM1 15×6.0 100/5H +45 カラー:MTB KYOHO スタッドレス&ホイール4本(1台分)セット. 185/60R16 86Q トーヨー/OBSERVE GARIT GIZ ■Circular Ver. DF 16×6.0 100/4H +45 カラー:GBK KYOHO スタッドレス&ホイール4本(1台分)セット,【17インチ】 スタッドレスタイヤ 225/65R17 【日本製★国産 アイスナビ SUV】7.0J-17inch 5穴 PCD114.3 in48【Claire MD25】エクストレイル(T32系)等にお勧め NI-21HEX M12×P1.25 お買得! ホイール付 1台分セット 225/65-17 【送料無料】 【17インチ】 スタッドレスタイヤ 215/45R17 【Winter アイスアシンメトリコ】7.0J-17inch 5穴 PCD114.3 in48【ZACK JP-110】オーリス(ZRE152H系) ブレビス(JCG10 JCG11 JCG15系)等にお勧め TY-21HEX M12×P1.50 新品 一台分 4本セット 215/45R17.

15インチ スタッドレスタイヤ ホイールセット【適応車種:MRワゴン(MF33S)】WEDS  ルーシー LUCY アイボリー 4.5Jx15ブリザック VRX 165/55R15,185/60R14 82Q DUNLOP ダンロップ WINTER MAXX 01 ウインターマックス 01 WM01 BORBET typeCA ボルベット タイプCA スタッドレスタイヤホイール4本セット 【15インチ】単品set 【日本製★国産 アイスナビ ZEA 2】205/65R15【ROSTA SWORD SPORK】6.0J-15inch 5穴 PCD114.3 in45 TY-21HEX M12×P1.50カムリ、エスティマ L/T等にお勧めスタッドレスタイヤ ホイール付 格安1輪分 205/65R15 【送料無料】. 【15インチ】単品set 【日本製★国産 アイスナビ ZEA 2】195/65R15【ZACK JP-110】6.0J-15inch 5穴 PCD114.3 in48 MZ-21HEX M12×P1.50ラフェスタHS、アクセラ(スポーツ)、プレマシー等にお勧め格安 スタッドレスタイヤ ホイール付1輪分 送料無料,【14インチ】単品set 【Winter アイスアシンメトリコ】165/55R14【ROSTA SWORD SPORK】4.5J-14inch 4穴 PCD100 in45 HO-19HEX M12×P1.50ゼスト、ゼストスパーク、ライフ等にお勧め新品激安 スタッドレスホイール 付 1輪分 165-55-14 【送料無料】 【スタッドレスタイヤ&アルミホイールセット】 ティーダラティオ SC11 CDF1(クリエイティブ ディレクション) 1555+43 4-100 シルバー 【ブリヂストン/BRIDGESTONE】 REVO GZ 185/65R15, 【14インチ】単品set 【Winter アイスアシンメトリコ】155/65R14【JP STYLE MBS】4.5J-14inch 4穴 PCD100 in45 MZ-21HEX M12×P1.50キャロル(エコ)、AZワゴン(カスタムスタイル)等にお勧めスタッドレスタイヤ&ホイール 1輪分セット 送料無料,【14インチ】単品set【日本製★国産 ファルケン EPZF】175/65R14【AZsports SY-25】5.5J-14inch 4穴 PCD100 in38 TY-21HEX M12×P1.50デックス、bB、プロボックスワゴン、WILL Vi、プラッツ等にお勧めスタッドレスタイヤ&ホイール 1輪分セット 【14インチ】単品set 【日本製★国産 アイスガード IG30+】185/65R14【ZACK JP-812】5.5J-14inch 4穴 PCD100 in40 MZ-21HEX M12×P1.50ファミリアSワゴン(BJ5W)、ファミリア(BJ3P BJ5P)等にお勧めスタッドレスタイヤ ホイール付1輪分 送料無料. 【13インチ】単品set 【日本製★国産 ベクター4シーズン】145/80R13【JP STYLE SHANGLY】4.0J-13inch 4穴 PCD100 in42 MZ-21HEX M12×P1.50キャロル、キャロルエコ、AZワゴン等にお勧め新品 オールシーズンタイヤ&ホイール 1輪分セット 送料無料,【14インチ】単品set 【日本製★国産 ベクター4シーズン】155/55R14【JP STYLE UNI FIVE SP】4.5J-14inch 4穴 PCD100 in45 DH-21HEX M12×P1.50ミラ、ミラアヴィ、プレオ等にお勧め新品 オールシーズンタイヤ&ホイール 1輪分セット 1555514 DUNLOP WINTER MAXX 01 225/45R18MANARAY SCHNEIDER GRAN-X 18 X 7 +48 5穴 114.3. [215/60R17]YOKOHAMA / GEOLANDAR I/T-S スタッドレス [2/-][SMACK / SPARROW (NGM) 17インチ],16インチ VW パサート(3B)用 スタッドレス 205/55R16 ダンロップ ウインターマックス WM01 ボルベット タイプF(BS) タイヤホイール4本セット 輸入車 ジャガー X用 コンチネンタル コンチバイキングコンタクト6 205/55R16 94T XL & ユーロプレミアム ゲント2 スタッドレス タイヤホイール4本セット. 16インチ メルセデスベンツ Cクラスクーペ(C204)用 スタッドレス 205/55R16 ミシュラン X-ICE XI3 ユーロバーン STX(MT) タイヤホイール4本セット 輸入車,ミシュラン スタッドレス Xアイス 3 XI3 205/55R16 & アフロディーテ EF 16×6.5 114.3/5H + 45 シビック FD1 / FD2 195/55R15 85Q グッドイヤー/ICE NAVI 6 [2] ■BROCKEN DS25 15×5.5 100/4H +43 カラー:HMS RAYS MARUKA スタッドレス&ホイール4本(1台分)セット. DUNLOP WINTER MAXX 01 225/50R18WEDS ジョーカーマジック 18 X 8 +45 5穴 114.3,国産車用(スチール) ダンロップ WINTER MAXX WM01 155/80R13 と スチールホィール 13インチとの4本セット 【2016-2017カタログモデル スタッドレスタイヤ】【新品StudlessTire】 【送料無料】 YOKOHAMA ヨコハマ アイスガード5プラス IG50プラス 165/60R14 14インチ スタッドレスタイヤ ホイール4本セット LEHRMEISTER リアルスポーツ カリスマVS6 4.5J 4.50-14.

Tags:ヨコハマ スタッドレス アイスガード ファイブ IG50プラス IG50+ 155/65R13 & ジョーカー ショット 13×4.0 100/4H + 45 ekスポーツ H81W;【送料無料】 YOKOHAMA ヨコハマ アイスガード SUV G075 235/55R18 18インチ スタッドレスタイヤ ホイール4本セット BRANDLE-LINE ブランドルライン カルデス パールブラックポリッシュ 7.5J 7.50-18;【14インチ】 スタッドレスホイール 165/70R14 【日本製★国産 ブリザック REVO GZ】5.5J-14inch 4穴 PCD100 in40【ROSTA SWORD SPORK】マーチ(K13系) マーチ(K12系)等にお勧め NI-21HEX M12×P1.25 格安!スタッドレス 4本セット 165/70/14;ヨコハマ スタッドレス アイスガード ファイブ IG50プラス IG50+ 195/65R15 & ヴェルバ アグード 15×6.0 114.3/5H + 53 ラフェスタハイウェイスター CWEFWN / CWEAWN;YOKOHAMA スタッドレス ice GUARD FIVE PLUS IG50+ 195/65R15 & TEAD TRICK 15×6.0 114.3/5H + 52 ステップワゴン RF 系;BRIDGESTONE(ブリヂストン) BLIZZAK(ブリザック) REVO GZ  ホイール GS-05 サイズ155/65R14(4H/100)[4本セット] gz-gs05-15565r14;175/70R14 84Q ブリヂストン/BLIZZAK VRX [2] ■CROSS SPEED PREMIUM R 14×5.5 100/4H +38 カラー:MSL HOT STUFF スタッドレス&ホイール4本(1台分)セット;
。。

読者です 読者をやめる 読者になる 読者になる
{yahoojp}xt01-zzp03-wl-3021