首页 > 解决方案 > 如何为 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部分发生。

标签: swiftuiswipe

解决方案


这是修复

class Coordinator: NSObject{

    var parent : SwipeGesture

    init(parent1 : SwipeGesture){    // << corrected type !!
        parent = parent1
    }

推荐阅读