IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    macOS 模拟触摸板向下滑动

    血衫非弧の一存发表于 2024-10-10 00:00:00
    love 0

    今天需要在 macOS 上模拟触控板滑动事件,并且希望模拟自然的人类手势,即速度由慢到快。用 Swift 来实现,并控制滑动的时间间隔,目标是每隔 4 到 8 秒执行一次向下滑动的操作,滑动时速度逐步加快。简单记录一下:

    import Foundation
    import CoreGraphics
    
    func simulateAcceleratingScrollDown() {
        let totalSteps = 25
        let initialScrollAmount: Int32 = -5
        let maxScrollAmount: Int32 = -25
        let initialDelay: TimeInterval = 0.1
        let minDelay: TimeInterval = 0.02
        
        for step in 1...totalSteps {
            let scrollAmount = initialScrollAmount + (Int32(step) * (maxScrollAmount - initialScrollAmount) / Int32(totalSteps))
            let currentDelay = initialDelay - (initialDelay - minDelay) * Double(step) / Double(totalSteps)
            let scrollEvent = CGEvent(scrollWheelEvent2Source: nil, units: .pixel, wheelCount: 1, wheel1: scrollAmount, wheel2: 0, wheel3: 0)
            
            scrollEvent?.post(tap: .cghidEventTap)
            Thread.sleep(forTimeInterval: currentDelay)
        }
    }
    
    func randomInterval() -> TimeInterval {
        return TimeInterval(arc4random_uniform(5) + 4)
    }
    
    func startRandomScrolling() {
        let interval = randomInterval()
        Timer.scheduledTimer(withTimeInterval: interval, repeats: false) { _ in
            simulateAcceleratingScrollDown()
            startRandomScrolling()
        }
    }
    
    RunLoop.current.run()
    

    解释:

    • simulateAcceleratingScrollDown(): 模拟触控板的滑动动作,滚动步数由慢到快,每步滚动的像素量逐渐增加,延时逐渐缩短。
    • randomInterval(): 生成 4 到 8 秒的随机时间间隔。
    • startRandomScrolling(): 定时器每次等待随机时间后调用滑动事件,并继续递归调用。


沪ICP备19023445号-2号
友情链接