私は現在、Swiftを使ってMac用のスライドショーアプリケーションを作っています。このアプリケーションでは、スライドショーの実行中にマウスを隠しておき、マウスがしばらく動かされていないようにしたいと思っています。例えば、Quick Time Playerのようにします。Macアプリケーションを移動しないでマウスを隠す
今私はNSCursor.hide()
とNSCursor.unhide()
とNSCursor.setHiddenUntilMouseMoves()
を使ってたくさんの方法を試しましたが、それほどうまくいきませんでした。
まず、メインのViewControllerでmouseMoved関数を呼び出さないようにしました.2番目に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")
}
}
}
事前にどうもありがとう! mouseMoved
イベントを受信する
試したコードを貼り付けてください。 – Alistra
申し訳ありません、ありがとうございます! –