SwiftUI 不断更新坐标位置

Posted

技术标签:

【中文标题】SwiftUI 不断更新坐标位置【英文标题】:SwiftUI Update coordinate location constantly 【发布时间】:2020-08-10 03:39:28 【问题描述】:

我正在尝试模仿一个类似于超级汽车的功能,您可以在该功能中看到一个大头针在地图上不断移动。

我有一张地图,上面有别针。现在,我可以设置一个循环并在计时器上为其提供不同的坐标,在此我等待第二个中间坐标。

或者有比在 updateUIView 函数中更好的方法吗?

我知道坐标应该是一个@State 变量,但我应该在哪里更改变量?我应该调用另一种方法吗?我应该在哪里调用它?

struct ContentView: UIViewRepresentable 


func makeUIView(context: Context) -> MKMapView 
    MKMapView(frame: .zero)


func updateUIView(_ view: MKMapView, context: Context) 


    // 1
    view.mapType = MKMapType.standard // (satellite)

    // 2
    let mylocation = CLLocationCoordinate2D(latitude: 47.6127177,longitude: -122.1995211)

    // 3
    let runner = CLLocationCoordinate2D(
        latitude: 47.611991,longitude: -122.198849)
    let span = MKCoordinateSpan(latitudeDelta: 0.005, longitudeDelta: 0.005)
    let region = MKCoordinateRegion(center: mylocation, span: span)
    view.setRegion(region, animated: true)

    // 4
    let annotation = MKPointAnnotation()
    annotation.coordinate = mylocation

    annotation.title = "My Location"
    
    let annotation_moving = MKPointAnnotation()
    annotation_moving.coordinate = runner
    annotation_moving.title = "ubercare"

    
    let annotations = [annotation, annotation_moving]
    view.addAnnotations(annotations)
    
    



【问题讨论】:

【参考方案1】:

您最好创建一个对象/类,使其成为这种类型的Coordinator。然后您可以设置CADisplayLink 或其他一些基于计时器的机制来更新坐标。但是你的协调器是一个类也意味着它不会在每次View 层次结构中的某些东西发生变化时都被吹走,这对你的情况很重要。

【讨论】:

以上是关于SwiftUI 不断更新坐标位置的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 中如何获取任意视图触摸位置(全局或局部)的坐标

SwiftUI 中如何获取任意视图触摸位置(全局或局部)的坐标

SwiftUI 中如何获取任意视图触摸位置(全局或局部)的坐标

SwiftUI - 如何获取新创建的按钮的确切中心坐标/位置

显示用户坐标 SwiftUI

SwiftUI 获取 TextField 或任何视图的坐标