일모도원(日暮途遠) 개발자
[MacCatalyst] 마우스 커서 숨기기 본문
난 AppDelegate.swift안에 아래 코드를 두었다.
Timer를 하나 선언하고, 마우스 시간 변수(마우스가 안움직이고 5초지나면 마우스 사라지게할)를 선언하였다.
#if targetEnvironment(macCatalyst)
// MacOs feature
private var mouseTimer: Timer?
private var mouseTimeOut: Float = 5.0 // 5초가 지나면 마우스를 숨긴다.
#endif
동영상 플레이버튼을 누르면 disableAutoHideMouse함수를 호출한다.
if let app = UIApplication.shared.delegate as? AppDelegate {
app.disableAutoHideMouse()
}
disableAutoHideMouse함수에서는 mouseTimer가 있으면 초기화하고, 위에서 정한 5초간격으로 hideMouse함수를 호출한다.
func enableAutoHideMouse() {
#if targetEnvironment(macCatalyst)
//마우스 타이머가 있으면 초기화한다.
if mouseTimer != nil {
mouseTimer!.invalidate()
mouseTimer = nil
}
// 5초마다 hideMouse함수를 호출한다.
mouseTimer = Timer.scheduledTimer(timeInterval: TimeInterval(mouseTimeOut), target: self, selector: #selector(hideMouse), userInfo: nil, repeats: true)
logFor.DLog(message: "Enable mouse cursor event")
#endif
}
hideMouse함수가 호출되면 CGEventSource.secondsSinceLastEventType로 마우스가 마지막으로 움직인 시간을 받아온다.(CGEventType.mouseMoved) 그리고 그게 5초보다 크면 NSCursor.setHiddenUntilMouseMoves(true)로 마우스를 숨긴다.
#if targetEnvironment(macCatalyst)
@objc func hideMouse() {
if Float(CGEventSource.secondsSinceLastEventType(CGEventSourceStateID.combinedSessionState, eventType: CGEventType.mouseMoved)) > mouseTimeOut {
logFor.DLog(message: "Hide mouse cursor")
NSCursor.setHiddenUntilMouseMoves(true)
}
}
#endif
동영상을 정지하거나 동영상뷰를 나가면 enableAutoHideMouse를 호출한다.
if let app = UIApplication.shared.delegate as? AppDelegate {
app.enableAutoHideMouse()
}
그럼 mouseTimer를 무효화시켜서 더이상 5초간격으로 hideMouse를 호출하지 못하도록 한다.
func disableAutoHideMouse() {
#if targetEnvironment(macCatalyst)
if mouseTimer != nil {
mouseTimer!.invalidate()
mouseTimer = nil
logFor.DLog(message: "Disable mouse cursor event")
}
#endif
}
'iOS개발 > MacCatalyst' 카테고리의 다른 글
[MacCatalyst] 웹뷰에서 키보드 타이핑이 안될때 (0) | 2022.08.24 |
---|---|
[MacCatalyst] MacBundle.bundle을 맥에만 추가하기 (0) | 2022.08.23 |
[MacCatalyst] 이미지 파일 저장하기 (0) | 2022.08.20 |
[MacCatalyst] 맥용 테스트 플라이트 설치하기 (0) | 2022.07.20 |
[MacCatalyst] 스크린 세이버 동작안하게 하기 (0) | 2022.07.20 |