【发布时间】:2017-01-01 14:35:05
【问题描述】:
我目前正在使用 Swift 为 Mac 制作幻灯片应用程序。在这个应用程序中,我想在幻灯片运行并且鼠标有一段时间没有移动时隐藏鼠标,就像在 Quick Time Player 中所做的那样。
现在我尝试了很多使用NSCursor.hide() 和NSCursor.unhide() 以及NSCursor.setHiddenUntilMouseMoves() 的方法,但都没有奏效。
首先,我没有让它在我的主 ViewController 中调用 mouseMoved 函数,其次,NSCursor.setHiddenUntilMouseMoves() 似乎并不总是有效,即使我根本没有触摸我的触控板。就在更改幻灯片中图像的代码之后,我看到图像正在更改,但是使用调试器时,当光标未隐藏时,它不会在该代码行上停止。
有人能告诉我一个如何让它工作的一般方法吗?我很确定这不是一件很奇特的事情,而且有比我尝试的更简单的方法。
以下是我尝试过的:
import Cocoa
class DiashowViewController: NSViewController {
enum DiashowState {
case playing
case paused
case stopped
}
var files: [URL]?
var diaTimer = Timer()
var diashowState: DiashowState = .stopped
var mouseTimer = Timer()
@IBOutlet weak var diaView: NSImageView!
override func viewDidLoad() {
super.viewDidLoad()
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
func playDiashow() {
if diashowState == .paused {
diaTimer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(self.changeDia), userInfo: nil, repeats: true)
diashowState = .playing
NSCursor.setHiddenUntilMouseMoves(true)
}
}
func playDiashow(withFiles files: [URL]) {
stopDiashow()
self.files = files
diashowState = .paused
playDiashow()
changeDia()
}
func pauseDiashow() {
if diashowState == .playing {
diaTimer.invalidate()
diashowState = .paused
}
}
override func mouseMoved(with event: NSEvent) {
print("MOUSE MOVED")
}
func stopDiashow() {
pauseDiashow()
diaView.image = nil
files = nil
diashowState = .stopped
}
func changeDia() {
if diashowState == .playing {
let i = Int(arc4random_uniform(UInt32(files!.count)))
let thisDiaURL = files![i]
let thisDia = NSImage(contentsOf: thisDiaURL)
thisDia?.size = NSSize(width: (thisDia?.representations.first?.pixelsWide)!, height: (thisDia?.representations.first?.pixelsHigh)!)
diaView.image = thisDia
NSCursor.setHiddenUntilMouseMoves(true)
print("HIDE MOUSE")
}
}
}
提前非常感谢!
【问题讨论】:
-
请粘贴您尝试过的代码
-
对不起,给你!
标签: swift macos cocoa appkit nscursor