对于我的全屏应用,如果没有移动,我想在几秒钟后隐藏光标,如QuickTime或iTunes中的全屏模式。大概我打算打电话给[NSCursor setHiddenUntilMouseMoves:YES]
,但我怎么知道何时打电话呢?
据推测,我正在寻找与Hide mouse cursor after an idle time相同的内容,但在Mac上。我找不到一种方法来获得类似的“空闲时间”。 (另外,我可能不关心键盘事件,只关心鼠标移动。)
答案 0 :(得分:5)
您可以使用以下命令获取光标(如果您还需要键盘)的空闲时间:
CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateCombinedSessionState, kCGEventMouseMoved)
Swift 3代码:
CGEventSource.secondsSinceLastEventType(CGEventSourceStateID.combinedSessionState, eventType: CGEventType.mouseMoved)
另见http://developer.apple.com/library/mac/#documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html。您可能每隔几秒钟就必须轮询一次这个函数,如果返回的时间减少,您应该假设用户移动了光标。
答案 1 :(得分:1)
如何使用NSTimer并在n秒后检查是否有任何事情发生?
答案 2 :(得分:0)
您可以设置NSCursor.setHiddenUntilMouseMoves(true)
,例如:
import Cocoa
class MyWindowController: NSWindowController {
private var mouseTimer: Timer?
private var mouseTimeOut: Float = 1.0
override func awakeFromNib() {
mouseTimer = Timer.scheduledTimer(timeInterval: TimeInterval(mouseTimeOut),
target: self,
selector: #selector(hideMouse),
userInfo: nil,
repeats: true)
}
// MARK: - Mouse Cursor
@objc func hideMouse() {
if Float(CGEventSource.secondsSinceLastEventType(CGEventSourceStateID.combinedSessionState, eventType: CGEventType.mouseMoved)) > mouseTimeOut {
NSCursor.setHiddenUntilMouseMoves(true)
}
}
}