使用Tracking-Area对象

本文详细介绍了如何在MacOS应用程序中使用NSTrackingArea对象来实现鼠标跟踪功能。包括如何创建并配置跟踪区,以及如何处理不同类型的鼠标事件如进入、离开和移动等。此外还介绍了如何更新和管理跟踪区以及自定义光标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建NSTrackingArea对象 

 一个NSTrackingArea对象定义一个鼠标的运动敏感区域,当鼠标进入(Enter)/移动(moves)/离开(exits)这个敏感区域,Application Kit 发送 mouse-tracking, mouse-moved, and cursor-update 消息。

当你创建一个nstrackingarea对象必须指定一个或多个选项。这些参数是配置跟踪区行为。一般分为三类:

1.消息类型

如果你要求处理mouseEntered: 和mouseExited:消息,你需要添加NSTrackingMouseEnteredAndExited参数

如果你要求处理 mouseMoved:消息,你需要添加NSTrackingMouseMoved参数

如果你要求处理 cursorUpdate:消息,你需要添加NSTrackingCursorUpdate参数

2.追踪鼠标活动范围(必须设置下面一种)

NSTrackingActiveWhenFirstResponder 跟踪第一响应者View的消息

NSTrackingActiveInKeyWindow 跟踪关键窗口中View的消息

NSTrackingActiveInActiveApp 跟踪活动App中View的消息

NSTrackingActiveAlways 跟踪活动App任何时候的消息

3.跟踪区行为的高级设置

NSTrackingAssumeInside: 如果你想跟踪处理鼠标首次离开tracking area的消息

NSTrackingInVisibleRect:你可以跟踪和关联View的可见区域相同的一个区域的消息

NSTrackingEnabledDuringMouseDrag:你可以要求用鼠标拖动进出跟踪区域产生mouseentered:mouseexited:事件

 

通过NSTrackingArea initWithRect:options:owner:userInfo:创建一个实例对象。创建对象后,你必须通过NSView addTrackingArea:方法关联一个View对象。list6-1在一个自定义View的实例initwithframe:方法中创建和添加一个NSTrackingArea对象;在这种情况下,每当窗口是key window时,这个自定义View接收Application Kit发送来的mouseEntered:mouseExited: mouseMoved:消息

- (id)initWithFrame:(NSRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        trackingArea = [[NSTrackingArea alloc] initWithRect:eyeBox
            options: (NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveInKeyWindow )
            owner:self userInfo:nil];
        [self addTrackingArea:trackingArea];
    }
    return self;
}

 

管理跟踪对象updateTrackingAreas

1.当View添加到Window或者从window中删除,或者改变View在window中的位置,Application kit会重新计算Tracking-Area区域。

2. 当NSTrackingArea相关联的View不在可见区域时,Application kit无法重新计算Tracking-Area区域,除非NSTrackingArea在创建时设置NSTrackingInVisibleRect属性。

3. 如果不是自定义的View,不能在初始化中创建NSTrackArea对象,可以注册NSViewFrameDidChangeNotification消息,在消息处理函数中重创建NSTrackArea对象接收消息

- (void)updateTrackingAreas {
    NSRect eyeBox;
    [self removeTrackingArea:trackingArea];
    [trackingArea release];
    eyeBox = [self resetEye];
    trackingArea = [[NSTrackingArea alloc] initWithRect:eyeBox
        options: (NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | NSTrackingActiveInKeyWindow)
        owner:self userInfo:nil];
    [self addTrackingArea:trackingArea];
}

 

Managing Cursor-Update Events

1.一般情况下,光标进入不同类型的视图中,会变化成不同的光标图像。比如本文视图需要一个I型光标。很多Application kit类中都定义自己独特的光标图像,您可以为自己的自定义视图的子类实例的指定一个不同的光标图像

2.你想在自定义NSResponder(NSView)的cursorUpdate:方法中改变光标图像,你必须在创建NSTrackingArea对象方法initWithRect:options:owner:userInfo:中添加NSTrackingCursorUpdate属性,然后把NSTrackingArea对象使用addTrackingArea:方法关联View对象。此后,此后,该鼠标在进入跟踪区域后,会产生一个nscursorupdate的事件;NSWindow对象会发送cursorupdate:事件到跟踪区域的所有者(关联的NSView对象),在NSView的cursorUpdate:方法中改变光标图像。

3. nscursorupdate的事件会在响应链中传递

4.注意:当鼠标退出跟踪区域时,没有必要设置光标图像使它恢复原样。因为 Application Kit自动帮你处理。

-(void)cursorUpdate:(NSEvent *)theEvent
{
    [[NSCursor crosshairCursor] set];
}

 

 相关学习

老谭的<OSX的MouseEntered和MouseExited事件检测>http://www.tanhao.me/pieces/1808.html/

转载于:https://www.cnblogs.com/zhu917/p/5262864.html

### 关于3D Siamese Transformer网络用于点云单目标跟踪的研究 对于基于点云的单目标跟踪,研究者们已经探索了多种方法来提高检测精度和效率。一种创新的方法是采用Siamese架构结合Transformer机制,在处理三维空间中的物体时表现出显著优势。 #### 3D Siamese Transformer的工作原理 该模型通常由两个分支组成:一个是模板分支,负责编码已知的目标对象;另一个是搜索区域分支,旨在定位当前帧内的相同实例位置。通过引入自注意力机制(Self-Attention),使得网络能够更好地捕捉远距离依赖关系以及局部特征之间的交互作用[^1]。 为了适应点云数据的特点,这类算法往往还会加入专门设计的空间感知模块,比如边界意识密集特征指示器(Boundary-Aware Dense Feature Indicator)。这有助于增强对复杂场景下目标边界的理解能力,从而提升整体性能表现。 此外,变分贝叶斯框架下的变换器网络也被应用于布局生成任务中,虽然不是直接针对单目标跟踪,但其提出的某些技术可以为解决此类问题提供灵感[^4]。 ```python import torch.nn as nn class SiamTransNet(nn.Module): def __init__(self): super(SiamTransNet, self).__init__() # Define template branch and search region branch here def forward(self, template_point_cloud, search_region_point_cloud): """ Forward pass through the network. Args: template_point_cloud (Tensor): Template point cloud tensor. search_region_point_cloud (Tensor): Search region point cloud tensor. Returns: Tensor: Output of the network indicating target location within the search area. """ # Implement forward propagation logic using transformer layers ``` 尽管目前还没有找到具体描述“Adaptive Image Transformer for One-Shot Object Detection”的论文链接或代码实现][^[^23],不过上述提到的技术趋势表明,融合图像转换器与一次性学习策略可能是未来发展的方向之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值