我正在编写一个简单的Mines应用程序,以帮助我了解SwiftUI。因此,我希望主要点击(通常是LMB)“挖”(显示那里是否有矿井),以及希望次要点击(通常是RMB)来标记。
我正在挖掘工作!但是我不知道如何放置标记,因为我不知道如何检测辅助点击。
BoardSquareView(
style: self.style(for: square),
model: square
)
.gesture(TapGesture().modifiers(.control).onEnded(self.handleUserDidAltTap(square)))
.gesture(TapGesture().onEnded(self.handleUserDidTap(square)))
正如我前面所暗示的那样,handleUserDidTap
单击时可以正确调用by返回的函数,但是handleUserDidAltTap
只有在按住Control键时才能调用by返回的函数。这是有道理的,因为这就是代码的意思……但是我看不到任何可以使它注册第二次点击的API,因此我不知道该怎么办。
我也尝试过此方法,但行为似乎相同:
BoardSquareView(
style: self.style(for: square),
model: square
)
.gesture(TapGesture().modifiers(.control).onEnded(self.handleUserDidAltTap(square)))
.onTapGesture(self.handleUserDidTap(square))
就目前SwiftUI而言,这不可能直接实现。我敢肯定会在将来,但是目前,TapGesture
它显然主要集中在没有“右键单击”概念的iOS用例上,因此我认为这就是为什么忽略了这一点。请注意,“长按”概念是的形式的头等公民LongPressGesture
,并且几乎完全在支持这种理论的iOS上下文中使用。
也就是说,我确实想出了一种方法来完成这项工作。您所要做的就是依靠旧技术,然后将其嵌入到SwiftUI视图中。
struct RightClickableSwiftUIView: NSViewRepresentable {
func updateNSView(_ nsView: RightClickableView, context: NSViewRepresentableContext<RightClickableSwiftUIView>) {
print("Update")
}
func makeNSView(context: Context) -> RightClickableView {
RightClickableView()
}
}
class RightClickableView : NSView {
override func mouseDown(with theEvent: NSEvent) {
print("left mouse")
}
override func rightMouseDown(with theEvent: NSEvent) {
print("right mouse")
}
}
我对此进行了测试,并在一个相当复杂的SwiftUI应用程序中为我工作。这里的基本方法是:
NSView
。NSViewRepresentable
。这不是一个理想的解决方案,但对于目前而言可能已经足够了。我希望这能解决您的问题,直到Apple进一步扩展SwiftUI的功能为止。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句