【Swift/OC】MacOS 监听鼠标进出视图

本文介绍如何使用Objective-C和Swift在MacOS上创建视图,通过监听鼠标进出事件改变视图颜色。包括创建项目、更新跟踪区域及颜色变化的具体实现。

1. Objective-C实现

 

(1)创建OC新项目MonitorViewFromOC,在原有的视图中添加一个Custom View,添加新的类MonitorView,将其关联到Custom View,如图:

   (2)更改MonitorView中的updateTrackingAreas方法,通过mouseEntered和mouseExited监听鼠标进出视图


#import "MonitorView.h"

@implementation MonitorView

- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];
    // Drawing code here.
    self.layer.backgroundColor = [NSColor redColor].CGColor;
}

- (void)updateTrackingAreas {
    NSArray * trackingAreas = [self trackingAreas];
    for (NSTrackingArea *area in trackingAreas) {
        [self removeTrackingArea:area];
    }
    
    NSTrackingArea *trackingArea = [[NSTrackingArea alloc] initWithRect:self.bounds
                                                                options:(NSTrackingMouseEnteredAndExited |
                                                                         NSTrackingMouseMoved |
                                                                         NSTrackingActiveInActiveApp |
                                                                         NSTrackingInVisibleRect |
                                                                         NSTrackingAssumeInside |
                                                                         NSTrackingCursorUpdate)
                                                                  owner:self
                                                               userInfo:nil];
    [self addTrackingArea:trackingArea];
}

- (void)mouseEntered:(NSEvent *)event {
    self.layer.backgroundColor = [NSColor greenColor].CGColor;
}

- (void)mouseExited:(NSEvent *)event {
    self.layer.backgroundColor = [NSColor redColor].CGColor;
}


@end

(3)检测到鼠标进入视图中时,视图变成绿色,离开视图时,视图变成红色

2.Swift实现 

步骤和OC一样,只需要将MonitorView.swift改成如下


import Cocoa

class MonitorView: NSView {

    override func draw(_ dirtyRect: NSRect) {
        super.draw(dirtyRect)
        self.layer?.backgroundColor = NSColor.red.cgColor
        // Drawing code here.
    }
    
    override func updateTrackingAreas() {
        let trackingAreas = self.trackingAreas
        for area in trackingAreas {
            self.removeTrackingArea(area)
        }

        let trackingArea = NSTrackingArea.init(rect: self.bounds, options: [NSTrackingArea.Options.mouseEnteredAndExited,
                                                                            NSTrackingArea.Options.mouseMoved,
                                                                            NSTrackingArea.Options.activeInActiveApp,
                                                                            NSTrackingArea.Options.inVisibleRect,
                                                                            NSTrackingArea.Options.assumeInside,
                                                                            NSTrackingArea.Options.cursorUpdate],
                                               owner: self, userInfo: nil)
        
        self .addTrackingArea(trackingArea)
    
    }
    
    override func mouseEntered(with event: NSEvent) {
        self.layer?.backgroundColor = NSColor.green.cgColor
    }
    
    override func mouseExited(with event: NSEvent) {
        self.layer?.backgroundColor = NSColor.red.cgColor
    }
    
}

两个Demo:

CJY5588/MonitorView: MacOS 监听鼠标进出视图,Objective-C和Swift示例 (github.com)

MacOS监听鼠标进出视图-Swift文档类资源-CSDN文库

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三岁牧羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值