swiftui - 如何为 SwiftUI 制作滑动手势?
问题描述
在 SwiftUI 中有没有简单的手势识别方法?
根据本教程,我根据我的情况复制了代码:
(我需要从另一个视图更改值“page2”)
import SwiftUI
struct SwipeGesture: UIViewRepresentable {
@Binding var page2: Int
func makeCoordinator() -> SwipeGesture.Coordinator {
return SwipeGesture.Coordinator(parent1: self)
}
func makeUIView(context: UIViewRepresentableContext<SwipeGesture>) -> UIView {
let view = UIView()
view.backgroundColor = .clear
let left = UISwipeGestureRecognizer(target: context.coordinator, action: #selector(context.coordinator.left))
left.direction = .left
let right = UISwipeGestureRecognizer(target: context.coordinator, action: #selector(context.coordinator.right))
right.direction = .right
view.addGestureRecognizer(left)
view.addGestureRecognizer(right)
return view
}
func updateUIView(_ uiView: UIView, context: UIViewRepresentableContext<SwipeGesture>) {
}
class Coordinator: NSObject{
var parent : SwipeGesture
init(parent1 : NSObject){
parent = parent1
}
@objc func left(){
print("left swipe")
parent.page2 = parent.page2 + 1
}
@objc func right(){
print("right swipe")
parent.page2 = parent.page2 - 1
}
}
}
在 ContentView 中使用:SwipeGesture(page2: $page2)
@State var page = 0
用于主视图
@Binding var page: Int
就是为了这个SwipeGesture struct
问题是:
任何想法我做错了什么?
SwiftUI 代码:
var body: some View {
// MARK: - Screen Layers
ZStack {
// Logo name
VStack {
Spacer()
.frame(height: self.margin1)
Image(uiImage: UIImage(named: "lobby_bg-logo")!)
.renderingMode(.original)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(height: self.screenH * 0.3125)
Spacer()
}
SwipeGesture(page2: $page2)
错误:
无法将类型“NSObject”的值分配给类型“SwipeGesture”
init
部分发生。
解决方案
这是修复
class Coordinator: NSObject{
var parent : SwipeGesture
init(parent1 : SwipeGesture){ // << corrected type !!
parent = parent1
}
推荐阅读
- amazon-web-services - 无法在 AWS 控制台上创建 Lambda 函数
- c# - DispatcherUnhandledException 事件未捕获 WPF .NET 5 简单错误
- python - 如何将整个 MIDI 文件拆分为多个部分?
- java - 具有 JDBC 持久性的 ActiveMQ 导致代理上的 OutOfMemory
- vba - 动态范围问题
- visual-studio-code - 安装 Dart 扩展后,VSCode 中的 Dark+ 主题发生了变化
- javascript - ReactJs 动态组件渲染与动态路由
- javascript - 是否可以使用虚拟消息 React 测试 socket.Io
- javascript - 如何使用 Axios 将大对象作为字符串发布?
- mysql - 在 mysql 工作台上计算模式的最佳方法是什么?