Ser*_*zov 9 uikit mapkit swift swiftui
我尝试在 SwiftUI 应用程序中处理 Map UIKit 组件手势。Xcode 显示此警告:“字符串文字不是有效的 Objective-C 选择器”
// Binding to UIKit component
import SwiftUI
import MapKit
struct MapView: UIViewRepresentable {
class Coordinator: NSObject, MKMapViewDelegate {
@Binding var selectedPin: MapPin?
init(selectedPin: Binding<MapPin?>) {
self._selectedPin = selectedPin
}
func mapView(_ mapView: MKMapView,
didSelect view: MKAnnotationView) {
guard let pin = view.annotation as? MapPin else {
return
}
pin.action?()
selectedPin = pin
}
func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) {
guard (view.annotation as? MapPin) != nil else {
return
}
selectedPin = nil
}
}
@Binding var pins: [MapPin]
@Binding var selectedPin: MapPin?
func makeCoordinator() -> Coordinator {
return Coordinator(selectedPin: $selectedPin)
}
func makeUIView(context: Context) -> MKMapView {
let view = MKMapView(frame: .zero)
let gRecognizer = UITapGestureRecognizer(target: self, action: #selector(triggerTouchAction(gestureRecognizer:)))
view.addGestureRecognizer(gRecognizer)
view.delegate = context.coordinator
return view
}
func updateUIView(_ uiView: MKMapView, context: Context) {
uiView.removeAnnotations(uiView.annotations)
uiView.addAnnotations(pins)
if let selectedPin = selectedPin {
uiView.selectAnnotation(selectedPin, animated: false)
}
}
@objc func triggerTouchAction(gestureReconizer: UITapGestureRecognizer) {
//Add alert to show it works
print("Hello, tap!")
}
}
Run Code Online (Sandbox Code Playgroud)
我希望在我的 Xcode 控制台中有消息,但没有产生触摸事件。
环境:Xcode 11 beta 6 macOS Mojave 10.14.6
Lor*_*ini 12
@objc 不能应用于结构内的函数。在 Coordinator 中移动函数,然后以这种方式更改 UIGestureRecognizer 声明:
let gRecognizer = UITapGestureRecognizer(target: context.coordinator, action: #selector(Coordinator.triggerTouchAction(gestureReconizer:)))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3144 次 |
最近记录: |