Как делать жесты смахивания для SwiftUI? - PullRequest
1 голос
/ 27 мая 2020

Есть ли простой способ распознавания жестов в 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 Проблема: enter image description here

Есть идеи, что я сделал не так?

Код 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.

1 Ответ

1 голос
/ 28 мая 2020

Вот исправление

class Coordinator: NSObject{

    var parent : SwipeGesture

    init(parent1 : SwipeGesture){    // << corrected type !!
        parent = parent1
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...