我目前正在使用Swift爲Mac製作幻燈片應用程序。在這個應用程序中,我想隱藏鼠標,而幻燈片正在運行,並且鼠標還沒有移動一段時間,就像在Quick Time Player中完成的一樣。將鼠標移動到Mac應用程序後不移動它
現在我已經嘗試了一系列使用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")
}
}
}
非常感謝提前!
請粘貼你試過的代碼 – Alistra
對不起,你去了! –