gpt4 book ai didi

objective-c - 鼠标悬停在 NSView subview 上

转载 作者:行者123 更新时间:2023-12-03 17:07:06 31 4
gpt4 key购买 nike

我有一个处理鼠标事件的 NSView 子类,在该 NSView 内部我有一个 subview (这是 NSView 的另一个子类)。我如何处理两个 NSView 的鼠标事件。

我想要实现的目标如下:

一个 NSView,其中我有一个角色,当我在该 View 内移动鼠标时,角色会旋转以跟随鼠标。同样里面有一些项目,当鼠标悬停在一个项目上时我想显示一些信息...如何实现这一点?

基本上:两个类接收并响应鼠标悬停。

致以诚挚的问候克里斯蒂安

最佳答案

这是我们在 Swift 5 中的做法:

class TrackingAreaView: NSView {

private var isMouseOverTheView = false {
didSet {
backgroundColor = isMouseOverTheView ? .red : .green
}
}
private lazy var area = makeTrackingArea()
private var backgroundColor: NSColor? {
didSet {
setNeedsDisplay(bounds)
}
}

init() {
super.init(frame: NSRect()) // Zero frame. Assuming that we are in autolayout environment.
isMouseOverTheView = false
}

required init?(coder: NSCoder) {
fatalError()
}

public override func updateTrackingAreas() {
removeTrackingArea(area)
area = makeTrackingArea()
addTrackingArea(area)
}

public override func mouseEntered(with event: NSEvent) {
isMouseOverTheView = true
}

public override func mouseExited(with event: NSEvent) {
isMouseOverTheView = false
}

private func makeTrackingArea() -> NSTrackingArea {
return NSTrackingArea(rect: bounds, options: [.mouseEnteredAndExited, .activeInKeyWindow], owner: self, userInfo: nil)
}

open override func draw(_ dirtyRect: NSRect) {
if let backgroundColor = backgroundColor {
backgroundColor.setFill()
dirtyRect.fill()
} else {
super.draw(dirtyRect)
}
}
}

关于objective-c - 鼠标悬停在 NSView subview 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4645476/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com