TapGesture не работает в бета-версии Xcode 11.0 - PullRequest
1 голос
/ 13 июня 2019

Игра с SwiftUI и этим TapGesture () (или любым другим жестом), похоже, не работает для меня в приложении Какао для MacOS, несмотря на @available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *), когда я смотрю определение на TapGesture.

import SwiftUI

struct CircleView : View {
    var body: some View {
        Circle()
            .fill(Color.blue)
            .frame(width: 400, height: 400, alignment: .center)
            .gesture(
                TapGesture()
                    .onEnded { _ in
                        print("View tapped!")
                }
            )
    }
}

#if DEBUG
struct CircleView_Previews : PreviewProvider {
    static var previews: some View {
        CircleView()
    }
}
#endif

Сборка прошла успешно, я просматриваю круг в окне предварительного просмотра, и у меня открыта консоль, но ничего не печатается.

Я что-то не так делаю?Это бета-версия 10.15?Есть ли еще одна структура, которую мне нужно импортировать, кроме SwiftUI?Новое в Swift здесь.

1 Ответ

1 голос
/ 13 июня 2019

Кран работает нормально, но при предварительном просмотре приложения вы не увидите свои заявления print в консоли. На самом деле запустите приложение, и вы увидите операторы print, отображаемые на вашей консоли.

Или измените приложение, чтобы оно отображало что-то в пользовательском интерфейсе, подтверждающее жест касания, например, Alert:

struct CircleView : View {
    @State var showAlert = false

    var body: some View {
        Circle()
            .fill(Color.blue)
            .tapAction {
                self.showAlert = true
            }
            .presentation($showAlert) {
                Alert(title: Text("View Tapped!"),
                      primaryButton: .default(Text("OK")),
                      secondaryButton: .cancel())
        }
    }
}

Или, возможно, вы захотите оживить изменение цвета фигуры:

struct CircleView: View {
    @State var isBlue = true

    var body: some View {
        Circle()
            .fill(isBlue ? Color.blue : Color.red)
            .tapAction {
                withAnimation {
                    self.isBlue.toggle()
                }
        }
    }
}
...