V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Smash
V2EX  ›  Swift

半天没找到 SwiftUI MacOS 下鼠标滚轮事件的文档,兼容实现方式一点都不 Swift 。。

  •  
  •   Smash · 2021-06-10 23:53:49 +08:00 · 1656 次点击
    这是一个创建于 1297 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天花了 2 个小时,看完了 Swift 的基本语法,然后准备写个 MacOS 的图片查看器做练习。

    我的开发机版本 10.15.7 Catalina,只能用 1.0 的 SwiftUI 。

    需求是我想在 Image 对象上监听滑轮滚动,然后对图片进行缩放处理,结果发现一堆手势都有回调函数,但是就是没有 wheelScroll 的回调函数。

    最后,搜索了半天,StackOverflow 给出的写法是这样的

            Image("1")
                .resizable()
                .aspectRatio(contentMode: .fit)
                .frame(alignment: .center)
                .onAppear {
                    NSEvent.addLocalMonitorForEvents(matching: [.scrollWheel]) {
                        print("mouse: \($0.scrollingDeltaX) \($0.scrollingDeltaY)")
                        return $0
                    }
                }
    

    我想说,这一点都不 Swift,一点都不声明式。

    所以,有更优的解法吗?

    还是说 SwiftUI 现在写 MacOS 的 App 纯属就是个玩具?

    6 条回复    2021-06-13 21:15:05 +08:00
    ysc3839
        1
    ysc3839  
       2021-06-11 00:07:35 +08:00 via Android
    我不懂 macOS 开发,以下仅仅是我个人非常浅薄的认识:
    以前简单翻过一个用 Swift 开发的 app 代码,它没有使用 xib 或 storyboard 来写界面,而是直接代码创建 NSWindow 等等。
    现在来看 SwiftUI,感觉就是对 NSXxx 那些控件包装了一层而已,可能最大的意义是统一 NSXxx 和 UIXxx 。
    Smash
        2
    Smash  
    OP
       2021-06-11 00:16:26 +08:00
    StackOverflow 上有人跟我遇到一样的问题,1 个月前的提问,只有一个人回复让他用 AppKit 来写,😥。。
    vtoexOwner
        3
    vtoexOwner  
       2021-06-13 20:44:03 +08:00
    苹果系列没有有滚轮的鼠标吧,你要找的这个事件是不是根本就不存在 ?😂
    我想你可能要找那种捏合手势的回调吧
    Smash
        4
    Smash  
    OP
       2021-06-13 20:46:31 +08:00
    @vtoexOwner 已经放弃 SwiftUI 了,还是用 Storyboard 来实现的,NSImageView 默认有 onWheelScroll 回调。
    Smash
        5
    Smash  
    OP
       2021-06-13 20:48:03 +08:00
    @vtoexOwner SwiftUI 写界面是真的快,可惜现在我觉得还不够完善。很多 MacOS 的能力都没有很好的接口调用,最后还是要用 SwiftUI+Appkit 来写,我不如直接 Appkit 写了。
    vtoexOwner
        6
    vtoexOwner  
       2021-06-13 21:15:05 +08:00
    @Smash 是的, 昨天开始看了一天教程,今天试着撸了一下,感觉做基本的 UI 确实舒服,不必考虑一些回调、刷新问题,但问题也很多,一些 UIKit 框架中有的接口在这里都是没有了,比如说 textField 的清除按钮,查了下竟然是要自定义的……结合你的问题,在 macos 上应该也是存在相同的问题
    总体来说,除非是要同时做 macos 和 ios,不然不建议用 SwiftUI
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1559 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 17:00 · PVG 01:00 · LAX 09:00 · JFK 12:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.