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

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

  •  
  •   Smash · 179 天前 · 587 次点击
    这是一个创建于 179 天前的主题,其中的信息可能已经有所发展或是发生改变。

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