美文网首页MacOS 开发收录
MacOS 开发(十四) : NSView 自定义

MacOS 开发(十四) : NSView 自定义

作者: SoaringHeart | 来源:发表于2020-04-03 17:34 被阅读0次

macOS 的视图封装需要重写 draw 方法来实现,通过自定义鼠标状态枚举类型,将多种鼠标方法合并,同时代理方法会返回 NSEvent 参数,实现了调用简单和扩展性兼得:

NNUserView.png

视图公用:

public extension NSResponder {
    /// 自定义鼠标状态
    @objc enum MouseState: Int {
        case down = 0
        case up = 1
        case entered = 2
        case exited = 3
    }
}

视图自定义:

import Cocoa

@objc protocol NNUserInfoViewDelegate: NSObjectProtocol {
    @objc func userInfoView(_ userView: NNUserInfoView, state: NSResponder.MouseState, event: NSEvent);
}

class NNUserInfoView: NSView {
    
    weak var delegate: NNUserInfoViewDelegate?
    
    var image = NSImage(named: "img_portrait_N")
    
    var name = "姓名"
    var desc = "个人简介"
    
    // MARK: -life cycle
    override var isFlipped: Bool{
        return true
    }

    override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)
        
        addTrackingRect(bounds, owner: self, userData: nil, assumeInside: true)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
   
    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)

        // Drawing code here.
        let imageRect = NSRect(x: 0, y: 0, width: bounds.height, height: bounds.height)
        image?.draw(in: imageRect)
        
        
        let paraStyle: NSMutableParagraphStyle = NSMutableParagraphStyle.default.mutableCopy() as! NSMutableParagraphStyle
        paraStyle.alignment = .left
        paraStyle.lineBreakMode = .byWordWrapping
        
        let attDic = [NSAttributedString.Key.paragraphStyle: paraStyle,
                      NSAttributedString.Key.foregroundColor: NSColor.labelColor,
                      NSAttributedString.Key.font: NSFont.systemFont(ofSize: 13, weight: .light)
        ]
        
        let attString = NSAttributedString(string: name, attributes: attDic)
        let nameRect = NSRect(x: bounds.height + 3, y: 0, width: bounds.width - bounds.height - 3, height: bounds.height*0.5)
        attString.draw(in: nameRect)
        
        let attStringSub = NSAttributedString(string: desc, attributes: attDic)
        let descRect = NSRect(x: bounds.height + 3, y: bounds.height*0.5, width: bounds.width - bounds.height - 3, height: bounds.height*0.5)
        attStringSub.draw(in: descRect)
    }
    
    // MARK: -mouse
    override func mouseEntered(with event: NSEvent) {
//        print("\(#function):\(event)")
        delegate?.userInfoView(self, state: NSResponder.MouseState.entered, event: event)
    }
    
    override func mouseExited(with event: NSEvent) {
//        print("\(#function):\(event)")
        delegate?.userInfoView(self, state: NSResponder.MouseState.exited, event: event)
    }
    
    override func mouseDown(with event: NSEvent) {
//        print("\(#function):\(event)")
        delegate?.userInfoView(self, state: NSResponder.MouseState.down, event: event)
    }
    
    override func mouseUp(with event: NSEvent) {
//        print("\(#function):\(event)")
        delegate?.userInfoView(self, state: NSResponder.MouseState.up, event: event)        
    }
    
}

相关文章

  • MacOS 开发(十四) : NSView 自定义

    macOS 的视图封装需要重写 draw 方法来实现,通过自定义鼠标状态枚举类型,将多种鼠标方法合并,同时代理方法...

  • macOS 开发-NSView

    NSView是用于应用程序中渲染、打印以及处理事件的基础容器。 概要 通常我们不需要直接使用NSView对象,而是...

  • macOS开发-NSView

    一.简介 NSView用于在应用程序中渲染、打印以及处理事件的基础容器,多数功能由AppKit自动调用。 NSVi...

  • macOS 开发之-NSView

    设置View的背景色 鼠标事件流 1、鼠标硬件先接收到用户点击;2、然后交给鼠标驱动来处理,这个驱动是在Mac O...

  • macOS 开发-NSView API

    NSView用于在应用程序中渲染、打印以及处理事件的基础容器。 概要 通常我们不需要直接使用NSView对象,而是...

  • NSView 转换图片

    macOS NSView 转化出图片数据

  • MacOS 开发 -NSView添加鼠标监控

    一、鼠标点击事件响应流程简述: 1.鼠标硬件先接收到用户点击;2.然后交给鼠标驱动来处理,这个驱动是在Mac OS...

  • macOS 开发-NSView实践-提个醒

    IT人士是久坐一族中核心大军,在学习NSView的相关知识后, 我们来通过视图的基本功能来开发一个简单的应用,用于...

  • Mac osx 开发-Swift-类似NSSegmentCont

    逻辑: 自定义NSView上面添加了一组自定义的NSButton,NSButton自定义包含了NSButton组件...

  • SceneKit涉及类的官方文档翻译(一)---- SCNVie

    SCNView 用来展示3D SceneKit内容的视图。 概览 在MACOS中,SCNView继承自NSView...

网友评论

    本文标题:MacOS 开发(十四) : NSView 自定义

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