NSWindow自定義控制按鈕

一直想實現微信的控制按鈕,經歷了太多的波折~

效果

  1. 非全屏


  2. 全屏


具體實現

1.storyboard中 window 的設置

2.viewcontroller

3.viewController代碼裏

//
//  ViewController.swift
//  Window
//
//  Created by fine on 2018/8/7.
//  Copyright © 2018年 fine. All rights reserved.
//

import Cocoa
import SnapKit

class ViewController: NSViewController {



    @IBOutlet weak var controlContainer: NSView!

    override func viewDidLoad() {
        super.viewDidLoad()


        

//        // Do any additional setup after loading the view.
          //注意這裏不是window實例的方法,而是NSWindow的類方法
        let close = NSWindow.standardWindowButton(.closeButton, for: .borderless)
        let mini = NSWindow.standardWindowButton(.miniaturizeButton, for: .borderless)
        let zoom = NSWindow.standardWindowButton(.zoomButton, for: .borderless)

         //將控制按鈕添加到自定義容器view中
        controlContainer.addSubview(close!)
        controlContainer.addSubview(mini!)
        controlContainer.addSubview(zoom!)

        //這裏使用snpkit 的來設置約束
        close?.snp.makeConstraints({ (make) in
            make.centerY.equalTo(controlContainer)
        make.left.equalTo(controlContainer).offset(10)

        })

        mini?.snp.makeConstraints { (make) in
            make.centerY.equalTo(controlContainer)
            make.left.equalTo(close!).offset(20)

        }

        zoom?.snp.makeConstraints({ (make) in
            make.centerY.equalTo(controlContainer)
            make.left.equalTo(mini!).offset(20)

        })

        //設置回調事件
        mini?.action = #selector(min)
        zoom?.action = #selector(click(_:))
    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }

    @IBAction @objc func click(_ sender: Any) {

        self.view.window?.toggleFullScreen(self);

        //這裏要隱藏titlebar自帶的控制按鈕(該控制在全屏後 鼠標置頂會出現,所以要隱藏實現和微信一的效果)
        self.view.window?.standardWindowButton(.zoomButton)?.superview?.subviews.forEach({ (itemView) in
            itemView.isHidden = true;
        })


    }

    @objc func min(){
        self.view.window?.performMiniaturize(self)
    }
    
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章