В настоящее время я делаю приложение для слайд-шоу для Mac с помощью Swift. В этом приложении я хочу скрыть мышь, пока слайд-шоу запущено, и мышь не была перемещена какое-то время, очень похоже на то, что это делается в Quick Time Player, например.Скрыть мышь в приложении Mac после его перемещения
Теперь я попробовал кучу способов, используя NSCursor.hide()
и NSCursor.unhide()
, а также NSCursor.setHiddenUntilMouseMoves()
, но без него все получилось.
Во-первых, мне не удалось заставить его вызвать функцию mouseMoved в моем основном ViewController, а во-вторых 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
Прошу прощения, вы идете! –