不定形のウインドウ(四角くないウインドウ)[Mac][Swift]
Swiftで、透明バックのウインドウの作り方
タイトルバー無しでウインドウを作成
var aWindow : NSPanel = NSPanel(contentRect: NSMakeRect(0.0, 0.0, 300.0, 200.0), styleMask: NSBorderlessWindowMask, backing: .Buffered, defer: false, screen: NSScreen.mainScreen())
バックグラウンドカラーをclearColorにセット
aWindow.backgroundColor = NSColor.clearColor()
opaqueをfalseに
aWindow.opaque = false
これで、ウインドウ(パネル)の背景が透過されてたうえ、配置しているUIパーツは透明にならない。
NSImageView等に背景を透明化できるPNGなどの画像を貼る。
var theView : NSImageView = NSImageView(frame: NSMakeRect(0.0, 0.0, 300.0, 200.0)) theView.image = NSImage(named: "IMG_6698")! aWindow.contentView.addSubview(theView)
タイトルバーを隠すので、移動は自分でやらないと行けないのだけど、マウスイベントが上手く取れない。
NSEventのlocationがうまく値を返してこないようで、実装できず。descriptionでログ出せばloc=(123.23,102.43)のように出てくるんだけどなあ。(OS X 10.10.2時点)
キャスト方法間違っていただけだった。
サンプルコード
//NSWindow invalidateShadow @IBAction func function015(sender: AnyObject) { var aWindow : NSPanel = NSPanel(contentRect: NSMakeRect(0.0, 0.0, 300.0, 200.0), styleMask: NSBorderlessWindowMask, //| NSMiniaturizableWindowMask //| NSClosableWindowMask, backing: .Buffered, defer: false, screen: NSScreen.mainScreen()) windowArray.addObject(aWindow) //ウインドウを保持するための配列に追加。アプリ終了時に配列は破棄 aWindow.backgroundColor = NSColor.clearColor() aWindow.level = 1000 aWindow.opaque = false var theView : NSImageView = NSImageView(frame: NSMakeRect(0.0, 0.0, 300.0, 200.0)) theView.image = NSImage(named: "IMG_6698")! aWindow.contentView.addSubview(theView) aWindow.center()//ウインドウをスクリーンの中心に aWindow.orderFront(self)//前面に aWindow.makeKeyAndOrderFront(self)//表示 }
更新時のバージョン
OS X 10.10