首页
学习
活动
专区
工具
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

4.1K10

macOS AppKit 的事件响应简介

一个NSView对象可以接收三种类型的鼠标事件:鼠标点击,鼠标拖拽和鼠标移动....鼠标拖动事件和鼠标抬起事件通常都会被发送给之前鼠标按下的那个视图(NSView)对象. 鼠标移动事件通常会派发到第一响应者....如果你要避免这种情况,可以通过重写NSView的acceptsFirstMouse: 方法,并返回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.9K20

    Jekyll-Admin-Mac-模板处理

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

    6.8K30

    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

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

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

    1.1K40

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

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

    8910

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

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

    2.3K20

    自定义Window标题栏titleBar 原

    自定义标题栏主要有如下两种思路: 1.去掉系统的标题栏,使用自定义的View来做标题栏。 2.隐藏系统的标题栏,进行标题栏的透明处理。...首先,现在Window的contentView中添加一个自定义的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支持开发者创建基于View的TableView视图,同样也支持基于Cell的TabelView...= ( 1 << 1 ), //允许用户进行尺寸调整 }; */ @property NSTableColumnResizingOptions resizingMask; //设置列头的提示标题 当鼠标悬停在类标题上时...视图     Cell-Base是OS X早起版本中常用的构造TabelView的方式,其中每一行的数据载体都必须是NSCell的子类。...视图     基于View-Base的TableView要比基于Cell的TableView更加灵活,其中每行数据载体可以是任意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对象相关联的媒体播放事件。

    90410

    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++中,错误处理机制通常通过返回错误代码来实现。当程序执行到某个函数时,如果该函数执行出现错误,则会返回一个特定的错误代码,程序员可以根据该错误代码进行相应的处理。

    71510

    SDK平台三态按钮的实现

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

    79940
    领券