【问题标题】:How to know if blue dot is within visible portions of my mapView?如何知道蓝点是否在我的 mapView 的可见部分内?
【发布时间】:2016-05-22 00:56:34
【问题描述】:

我正在使用 MKMapView。当用户滚动地图时,指示用户当前位置的蓝点会从他的视线中消失,点击 mapView 上的按钮会将他带回包含该蓝点的部分。我只是通过设置来做到这一点

 self.mapView.centerCoordinate = self.mapView.userLocation.coordinate;

按钮的动作方法。 但是一旦他滚动离开蓝点,我必须更改按钮的图像。那么,我怎么知道蓝点是否不在用户当前可见的地图部分中。

【问题讨论】:

    标签: ios objective-c mkmapview


    【解决方案1】:

    您可以使用内置的布尔标志self.mapView.userLocationVisible

    -(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{
    //do something here
     if(self.mapView.userLocationVisible){
       //Blue dot visible
     }
     else{
       //Blue dot hidden
     }
    //do something here
    }
    

    【讨论】:

      【解决方案2】:

      对于那些对代码感兴趣的人:

      -(void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{
          if (MKMapRectContainsPoint(self.mapView.visibleMapRect, MKMapPointForCoordinate(self.mapView.userLocation.coordinate))) {
              NSLog(@"blue dot visible");
          }else{
              NSLog(@"blue dot not visible");
          }
      }
      

      【讨论】:

        【解决方案3】:

        您可以向地图视图添加一个代理mapView:regionDidChangeAnimated:,以便在发生滚动事件时通知您。

        在您实现该方法时,您可以获得visibleMapRect 并使用MKCoordinateRegionForMapRect 来获取地图视图的相关真实世界坐标。然后就可以判断当前用户位置是否可见(这需要简单的计算,我认为没有内置方法)。

        【讨论】:

        • 最后一个问题。我的蓝点有时会在选择其他注释时变为灰色,有时在点击 mapView 时会变为灰色。我怎样才能保持它的蓝色?
        • 你实现了哪些委托方法(这真的是一个新问题)
        • viewForAnnotation、didSelectAnnotationView、didUpdateUserLocation、regionDidChangeAnimated。在 viewForAnnotation 中,如果 (annotation == mapView.userLocation),我将返回 nil。在更改注释图像之前的 didSelectAnnotationView 中,我确实检查了 if((MKAnnotationView.annotation == mapView.userLocation))。
        • 最好创建一个新问题并正确显示所有代码
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-20
        • 2018-12-06
        • 1970-01-01
        • 1970-01-01
        • 2011-10-14
        • 1970-01-01
        • 2015-03-09
        相关资源
        最近更新 更多