首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使透明的NSView子类处理鼠标事件?

要使透明的NSView子类处理鼠标事件,您需要遵循以下步骤:

  1. 创建一个透明的NSView子类。
代码语言:swift
复制
class CustomView: NSView {
    override init(frame frameRect: NSRect) {
        super.init(frame: frameRect)
        setupView()
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        setupView()
    }

    private func setupView() {
        wantsLayer = true
        layer?.backgroundColor = NSColor.clear.cgColor
    }
}
  1. 重写hitTest(_:)方法。
代码语言:swift
复制
override func hitTest(_ point: NSPoint) -> NSView? {
    let hitView = super.hitTest(point)
    return hitView == self ? nil : hitView
}
  1. 添加鼠标事件监听器。
代码语言:swift
复制
override func updateTrackingAreas() {
    super.updateTrackingAreas()

    if let trackingArea = trackingArea {
        removeTrackingArea(trackingArea)
    }

    let options: NSTrackingArea.Options = [.mouseEnteredAndExited, .activeInKeyWindow]
    let trackingArea = NSTrackingArea(rect: bounds, options: options, owner: self, userInfo: nil)
    addTrackingArea(trackingArea)
}

override func mouseEntered(with event: NSEvent) {
    Swift.print("Mouse entered")
}

override func mouseExited(with event: NSEvent) {
    Swift.print("Mouse exited")
}

现在,您的透明NSView子类将处理鼠标事件,并在鼠标进入和退出视图时触发mouseEnteredmouseExited方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS 点击事件如何穿透透明View?

{ return nil; } else { return hitView; } } 扩展 hitTest:withEvent:方法处理流程如下...: 首先调用当前视图pointInside:withEvent:方法判断触摸点是否在当前视图内; 若返回NO,则hitTest:withEvent:返回nil; 若返回YES,则向当前视图所有子视图...(subviews)发送hitTest:withEvent:消息,所有子视图遍历顺序是从top到bottom,即从subviews数组末尾向前遍历,直到有子视图返回非空对象或者全部子视图遍历完毕;...若第一次有子视图返回非空对象,则hitTest:withEvent:方法返回此对象,处理结束; 如所有子视图都返回非,则hitTest:withEvent:方法返回自身(self)。...- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { // 1.判断当前控件能否接收事件 if (self.userInteractionEnabled

4K10

macOS AppKit 事件响应简介

一个NSView对象可以接收三种类型鼠标事件:鼠标点击,鼠标拖拽和鼠标移动....鼠标拖动事件鼠标抬起事件通常都会被发送给之前鼠标按下那个视图(NSView)对象. 鼠标移动事件通常会派发到第一响应者....如果你要避免这种情况,可以通过重写NSViewacceptsFirstMouse: 方法,并返回YES NSView 通常会自动接收鼠标点击和鼠标拖拽事件,而不会主动接收鼠标移动事件.因为鼠标移动事件发生太过频繁...,很容易阻塞事件队列,所以默认情况下NSView不响应鼠标移动事件.如果一个NSView需要处理鼠标移动事件,那么需要向它窗口对象(NSWindow)明确声明一下,也就是调用NSWindow setAcceptsMouseMovedEvents...:方法 键盘事件派发路径 响应键盘输入是事件派发中最复杂部分之一.Cocoa 应用程序会遍历每一个键盘事件来确定它属于那种类型然后以及如何处理.先来看一下苹果官方给出一个键盘事件可能传递传递路径:

2.7K60
  • 问题探讨01: 如何使用鼠标滚轮使单元格中数值增减?

    这个问题是,在某单元格中有一个数字,当鼠标滚轮向上滚动时该单元格中数字以0.01间隔增加,向下滚动时以0.01间隔减少? 探讨 很显然,这需要使用Windows API来捕获鼠标事件。...可是很不幸,虽然VB解释所有的消息,却只让用户程序在事件处理部分消息,VB自己处理其他消息,或者忽略这些消息。...事实上,该方法可用于在VB中处理任何消息。 实现应用程序支持鼠标滚轮关键是,捕获鼠标滚轮消息 MSH_MOUSEWHEEL、WM_MOUSEWHEEL。...滚轮按钮相当于普通三键鼠标的中键,根据滚轮按钮动作,Windows分别发出WM_MBUTTONUP、WM_MBUTTONDOWN、WM_MBUTTONDBLCLK消息,这些消息VB已经在鼠标事件中支持...有没有哪位朋友在这方面有研究,可否指教一下:如何捕捉鼠标滚轮向前或向后滚动?

    1.9K10

    Jekyll-Admin-Mac 开发纪要-左侧菜单栏

    @IBDesignable和@IBInspectable 为了可以自定义背景颜色,我们创建一个继承 NSView子类 BaseView。...在Xcode6中使用IBDesignable创建自定义控件(翻译) 关于如何 NSView自定义背景颜色参考下面的连接 我们设置 NSView为继承与 BaseView 背景颜色试图。...但是到目前来说我们几乎达到显示 Logo,但是我们背景颜色设置白色不是我们所希望,我们设置默认透明颜色。 我们还发现我们我们试图并没有达到我们设置约束大小。...我们发现我们刚才创建 NSTableView显示背景颜色是白色,我们可以关闭 NSScrollView绘制背景颜色和设置 NSTableView背景颜色为透明即可。 ?...B97289BE-AD47-4616-BAF0-0A62F77DE986 我们给 NSTableView绑定一个方法事件

    2.1K10

    【Java AWT 图形界面编程】事件处理机制 ③ ( AWT 中常见事件事件监听器 | 低级事件 | 组件事件 | 窗口事件 | 鼠标事件 | 高级事件 | 动作事件 | 事件监听器 )

    文章目录 一、AWT 中常见事件 1、低级事件 2、高级事件 二、AWT 中常见事件监听器 一、AWT 中常见事件 ---- AWT 中事件分为两大类 , 低级事件 和 高级事件 ; 低级事件...: 基于某个特定基本动作事件 , 如 点击 , 拖动 , 获取焦点 , 失去焦点 等固定简单操作 ; 高级事件 : 不基于某个特定事件 , 而是 根据 功能具体含义 定义事件 ; 1、低级事件..., 组件获取焦点 , 失去焦点 触发事件 ; 鼠标事件 : MouseEvent , 鼠标 按下 , 移动 , 抬起 , 点击 触发事件 ; 键盘事件 : KeyEvent , 键盘 按下 , 松开...; 二、AWT 中常见事件监听器 ---- 事件监听器 与 事件是一一对应 , 只需要将事件 Event 改成 Listener 即可 ; AWT 中常见事件监听器 : 组件事件监听器 : ComponentListener...; 鼠标事件监听器 : MouseMotionListener , 监听 鼠标 按下 , 移动 , 抬起 , 点击 ; 键盘事件监听器 : KeyListener, 监听 键盘 按下 , 松开 , 点击

    1.8K20

    Jekyll-Admin-Mac-模板处理

    ⚠️因为之前我们 SideMenuItemView设置了背景颜色,所以我们在 SideMenuItemView.xib设置默认透明即可。 ?...073F87F3-FFEE-43C4-B7C4-3B4DEFDB8030 封装模块 这一块区域大部分都是相同,我们也封装成父类,实现用子类。...然后,可以以比显式显示视图内容更有效方式来操纵缓存内容。AppKit会自动创建底层图层对象(使用该方法)并处理视图内容缓存。如果该方法返回,则不应直接与底层对象进行交互。...您仍然使用该视图来处理鼠标和键盘事件,但绘图必须由Core Animation处理。...新建文章标题可以自定义 搜索标题可以自定义 按钮事件可以自定义 搜索事件可以自定义 我们在 ContentHeaderValue1关联一下 Label可以让外接设置 Label文字。

    6.7K30

    macOS 开发基础教程视频 - 理解bounds本质

    frame与bounds坐标系统(图片来自网络) 秦人不暇自哀,而后人哀之;后人哀之而不鉴之,亦使后人而复哀后人也 在便捷网络时代学习,更注重对基础知识借与鉴。...在macOS 开发基础教程视频课程NSView章节中,解释了关于视图frame和bounds坐标参照系统,限于授课经验与课程时间,感觉对NSViewbounds属性,表述不够深入,希望通过本文帮助观看课程同学加深对...父控件,我需要在你坐标系统中占据这个frame.origin位置,尺寸是frame.size区域),这样以来,父控件在布局时候,就会知道如何摆放它内部所有控件了。...这样bounds就成为了我们对NSView观景窗~ 如果现在你已经理解了bounds,那么对于ScrollView如何实现滑动展示其内部视图内容,就不会觉得奇怪了。...target: self, action: #selector(handlePanGesture(_:))) addGestureRecognizer(pan) } // 移动鼠标

    1K40

    Core Animation Programming

    UIView 具备处理触摸事件能力,并且支持基于Core Graphics 绘图.来实现仿射变换(比如旋转缩放平移等).或者一些简单滑动/渐变动画....在iOS 和 Mac OS 两个平台下,事件和用户交互存在比较大差异,比如Mac OS用户交互可以通过鼠标/键盘控制.而iOS则通过手势触摸....这就是为何iOS开发界面使用UIKit 和UIView ,而Mac OS 开发界面使用AppKit 和 NSView....图层不能处理触摸事件,同样也要视图不能做事情: 阴影,圆角,颜色边框 3D变换 非矩形范围 透明遮罩 多级非线性动画 CALayer's function 除了CALayer 类,CoreAnimation....CAScorllLayer 不提供键盘/鼠标处理事件和不显示滚动条.CATextLayer : 为了方便显示字符串图层CATiledLayer: 允许递增显示大而复杂图片 2.

    1.1K10

    Mac开发跬步积累(五): Dark Mode下适配你UI界面

    ,让用户关注焦点聚集在App本身视图中以便获取更佳视觉体验.关于AppKit中系统视图,苹果默认已经进行了暗黑模式适配升级,但对于许多自定义View,还是需要我们花一点点时间处理. 0x00...NSAppearance决定着AppKit如何渲染每个UI控件效果,尤其是与颜色或者图片相关部分....contrast (高对比度): 使图片与周边内容对比根据突出,仅能用于macOS10.14+之后版本 Template Images 使用模版图片也是一种常用适配解决方案,典型案例就是设置控件...: template 设置规则 需要忽略部分使用透明背景 需要显示部分使用黑色或者部分透明黑色 设置图片渲染模式为Template: 设置图片渲染模式...Appearance是存在继承关系:NSApp->NSWindow->NSView 通过代码方式设置NSViewappearance: class MyContentView : NSView {

    2.3K20

    如何处理事件流中不良数据

    同时,您消费者应用程序可以针对相同模式编写所有业务逻辑和测试,这样当它们接收和处理事件时,它们就不会抛出任何异常或错误计算结果。...状态事件(也称为事件携带状态传输)提供了在给定时间点实体完整视图。增量事件仅提供与先前增量事件更改。下图显示增量事件类似于国际象棋中移动,而状态事件则显示棋盘完整当前状态。...每个消费者都会收到正确状态副本,并且可以通过将其与他们可能存储在其域边界中任何先前状态进行比较来处理和推断其更改。 虽然增量提供较小事件大小,但您无法将其压缩掉。...您能做最好事情是发布一个撤消先前增量增量,但问题是所有消费者都必须能够处理撤消事件。...虽然这种昂贵且复杂解决方案应该是最后手段,但它是您武器库中必不可少策略。 降低错误数据影响 处理事件流中错误数据并不一定是一项艰巨任务。

    8810

    自定义Window标题栏titleBar 原

    自定义标题栏主要有如下两种思路: 1.去掉系统标题栏,使用自定义View来做标题栏。 2.隐藏系统标题栏,进行标题栏透明处理。...首先,现在WindowcontentView中添加一个自定义View,作为标题栏视图,View上可以添加图标或任意自定义功能按钮。如下: ?...通过如下代码来设置标题栏: //将系统标题栏设置透明 self.window.titlebarAppearsTransparent = YES; //将系统标题进行隐藏 self.window.titleVisibility...]; //获取到windows主视图 NSView * themeView = self.window.contentView.superview; //根据层级结构获取到标题栏视图 NSView...,这样是为了让系统3个功能按钮显示在自定义标题栏中间,但是当用户使用全屏功能进行全屏与非全屏切换时,系统会对标题栏尺寸进行重新布局,将功能按钮放回原来位置,为了避免这样问题,可以监听用户全屏切换事件

    1.5K20

    Flutter Web:鼠标相关处理

    前言 我们在利用Flutter Web开发pc端可以访问网站,所以会有一些关于鼠标处理。 悬停 可以点击widget,如button。如果鼠标悬停到这部分,会出现阴影,并且按下和释放都有阴影。...MaterialButton 先看如何改变单个按钮阴影效果,MaterialButton及其子类(FlatButton等)可以通过为hoverColor等属性设置自定义颜色,或者设置透明颜色来去除这些效果...这种需求可以通过MouseRegion实现,它类似GestureDetector,GestureDetector只能处理手势相关,比如点击、拖动等等,而MouseRegion则处理鼠标相关,包含进入onEnter..._buildBar则是要显示内容,而_buildDefault则是一个空白区域,用来检测鼠标Enter事件,比如: Widget _buildDefault(){ return Container...( width: double.infinity, height: 40, ); } 一个40高,屏幕宽度透明区域,当鼠标进入这个区域,则显示_buildBar内容

    1.6K20

    macOS开发之NSTableView应用详解

    在OS X v10.6版本之前,NSTableView中行数据载体视图必须是NSCell子类,之后版本OS X支持开发者创建基于ViewTableView视图,同样也支持基于CellTabelView...= ( 1 << 1 ), //允许用户进行尺寸调整 }; */ @property NSTableColumnResizingOptions resizingMask; //设置列头提示标题 当鼠标悬停在类标题上时...视图     Cell-Base是OS X早起版本中常用构造TabelView方式,其中每一行数据载体都必须是NSCell子类。...视图     基于View-BaseTableView要比基于CellTableView更加灵活,其中每行数据载体可以是任意NSView子类。...*)view; //获取某个View所在列 用于view-base - (NSInteger)columnForView:(NSView *)view; //创建一个用于渲染View 用于view-base

    4.8K21

    AVKit框架详细解析(一) —— 基本概览(一)

    Classes AVCaptureView AVCaptureView是NSView一个子类,可用于显示用于捕获媒体数据标准用户界面控件。...AVContentProposalViewController AVContentProposalViewController是用于创建自定义内容提议演示文稿UIViewController子类...导航标记组最常见形式是章节列表;但是,您还可以提供其他一组标记以允许用户跳转到演示文稿中重要事件。 例如,“Goals Scored”标记组可以总结记录体育赛事中关键时刻。...AVPlayerView AVPlayerView是一个NSView子类,用于显示AVPlayer对象可视内容,并提供标准控件来管理其播放。...AVPlayerViewControllerDelegate 播放器视图控制器委托协议定义了您可以实现方法来响应与AVPlayerViewController对象相关联媒体播放事件

    86910

    Mac开发跬步积累(六): 响应链NSResponder Chain

    (事件消息): Event Messages主要指的是由键盘/鼠标/触控板触发NSEvent事件.几乎所有的Event Messages都由当前窗口对象(NSWindow)响应链进行处理;事件消息处理起始于..., NSWindow, NSDrawer, NSWindowController, NSView等均是如此; 响应者是构成响应链中一部分. 0x03 第一响应者 第一响应者是指用户通过鼠标或者键盘选择交互对象...当一个NSWindow对象在接收到鼠标点击(mouse-down)事件时,会自动设置鼠标所处View为第一响应者;那么NSWindow对象如何确认某个对象是否能够成为第一响应者呢?...,它总是发送给第一响应者,而不是鼠标所在视图View; 0x04 从一个实际"栗子"开始 项目示例代码地址:ResponderChainDemo 理论结合实践,让我们通过一个实际项目示例来尝试学习响应链事件处理...添加键盘/鼠标事件响应并输入响应链信息 代码运行结果:鼠标事件正常响应,但键盘事件没有获得响应! 根据输出响应链信息,绘制响应链如下图: ?

    2.4K10

    C++ 异常和错误处理机制:如何使程序更加稳定和可靠

    在C++编程中,异常处理和错误处理机制是非常重要。它们可以帮助程序员有效地处理运行时错误和异常情况。本文将介绍C++中异常处理和错误处理机制。 什么是异常处理?...异常处理是指在程序执行过程中发生异常或错误时,程序能够捕获并处理这些异常或错误机制。例如,当程序试图访问一个未初始化指针或除以零时,就会发生异常。...C++中异常处理机制 C++中异常处理机制基于三个关键字:try、catch、和throw。try块用于包含可能抛出异常代码。如果在try块中发生异常,程序将跳转到与之关联catch块。...什么是错误处理? 错误处理是指在程序执行过程中出现错误时,程序能够捕获并处理这些错误机制。错误处理目的是确保程序能够正确地响应错误,并且能够提供有用错误信息,以便于程序员进行调试和修复。...C++中错误处理机制 在C++中,错误处理机制通常通过返回错误代码来实现。当程序执行到某个函数时,如果该函数执行出现错误,则会返回一个特定错误代码,程序员可以根据该错误代码进行相应处理

    67310

    SDK平台三态按钮实现

    当然鼠标按下和移出按钮展示状态系统自己提供有,这个时候在处理这两种状态只需要贴相应图片就行了,三态按钮实现关键在于如何判断鼠标已经移动到按钮上以及鼠标移出按钮,然后根据鼠标的位置将按钮做相应调整...判断鼠标在按钮相应位置,系统提供了一个函数_TrackMouseEvent用户处理鼠标移出、移入按钮。...指定服务请求(指定它需要侦听事件),这次主要用到是TME_HOVER和TME_LEAVE(侦听鼠标移开和移入事件) 4 HWND hwndTrack;//指定我们需要侦听控件句柄 5...,而按钮窗口过程由系统提供我们并不知道,所以只有使用子类方法在我们窗口过程中处理这两个消息。...在按钮创建后立马要检测鼠标所以可以按钮对应父窗口完成创建后子类化,对于窗口可以在它WM_CREATE消息中处理,对于对话框可以在WM_INITDIALOG消息中处理子类化调用函数SetWindowLong

    79440
    领券