今天花了 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 纯属就是个玩具?
1
ysc3839 2021-06-11 00:07:35 +08:00 via Android
我不懂 macOS 开发,以下仅仅是我个人非常浅薄的认识:
以前简单翻过一个用 Swift 开发的 app 代码,它没有使用 xib 或 storyboard 来写界面,而是直接代码创建 NSWindow 等等。 现在来看 SwiftUI,感觉就是对 NSXxx 那些控件包装了一层而已,可能最大的意义是统一 NSXxx 和 UIXxx 。 |
2
Smash OP |
3
vtoexOwner 2021-06-13 20:44:03 +08:00
苹果系列没有有滚轮的鼠标吧,你要找的这个事件是不是根本就不存在 ?😂
我想你可能要找那种捏合手势的回调吧 |
4
Smash OP @vtoexOwner 已经放弃 SwiftUI 了,还是用 Storyboard 来实现的,NSImageView 默认有 onWheelScroll 回调。
|
5
Smash OP @vtoexOwner SwiftUI 写界面是真的快,可惜现在我觉得还不够完善。很多 MacOS 的能力都没有很好的接口调用,最后还是要用 SwiftUI+Appkit 来写,我不如直接 Appkit 写了。
|
6
vtoexOwner 2021-06-13 21:15:05 +08:00
@Smash 是的, 昨天开始看了一天教程,今天试着撸了一下,感觉做基本的 UI 确实舒服,不必考虑一些回调、刷新问题,但问题也很多,一些 UIKit 框架中有的接口在这里都是没有了,比如说 textField 的清除按钮,查了下竟然是要自定义的……结合你的问题,在 macos 上应该也是存在相同的问题
总体来说,除非是要同时做 macos 和 ios,不然不建议用 SwiftUI |