美文网首页
NSWindow自定义控制按钮

NSWindow自定义控制按钮

作者: litesky | 来源:发表于2018-08-07 18:03 被阅读0次

    一直想实现微信的控制按钮,经历了太多的波折~

    效果

    1. 非全屏


      image.png
    2. 全屏


      image.png

    具体实现

    1.storyboard中 window 的设置

    image.png

    2.viewcontroller

    image.png

    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)
        }
        
    }
    
    

    相关文章

      网友评论

          本文标题:NSWindow自定义控制按钮

          本文链接:https://www.haomeiwen.com/subject/eibavftx.html