You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apple Magic Mouse无法使用SwiftUI MagnificationGesture的原因是什么?

为什么Apple Magic Mouse无法触发SwiftUI的MagnificationGesture?

问题根源

Apple Magic Mouse没有原生的双指捏合/张开手势,它的缩放操作默认是「按住Option键+滚动滚轮」——这是系统级的全局操作,不会直接被SwiftUI的MagnificationGesture识别。而触控板的双指捏合是专门的触控手势,能被SwiftUI直接捕获。

解决方案

要让Magic Mouse支持缩放,需要监听滚轮事件,结合按键判断来实现。可以用onScrollWheel modifier(iOS 16+/macOS 13+可用),检测用户是否按住Option键,然后调整缩放比例。

修改后的代码示例:

import SwiftUI

struct ContentView: View {
    @State private var scale: CGFloat = 1.0

    var body: some View {
        Circle()
            .fill(Color.red)
            .frame(width: 400, height: 400)
            .scaleEffect(scale)
            // 保留触控板的捏合手势支持
            .gesture(
                MagnificationGesture()
                    .onChanged { value in
                        scale = value
                    }
                    .onEnded { _ in
                        scale = 1.0
                    }
            )
            // 新增Magic Mouse的缩放支持:按住Option键滚动滚轮
            .onScrollWheel { event in
                guard event.modifiers.contains(.option) else { return }
                // 调整这里的系数可以改变缩放灵敏度
                let scaleAdjustment = event.delta.y > 0 ? 0.95 : 1.05
                scale *= scaleAdjustment
            }
            .animation(.easeInOut, value: scale)
    }
}

注意事项

  • onScrollWheel需要iOS 16或macOS 13及以上版本;
  • 可以根据需求修改0.95和1.05来调整缩放的快慢;
  • 用户操作时需要按住Option键滚动滚轮,这符合Magic Mouse用户的常规操作习惯。

内容的提问来源于stack exchange,提问作者swiftPunk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 08:54:55