4

我正在尝试更改用户位置的颜色,因为它是在 Apple 的“查找我的朋友”应用程序中完成的(参见随附的屏幕截图)。

请注意,我使用的是 MapBox SDK,我目前有以下方法:

- (RMMapLayer *)mapView:(RMMapView *)mapView layerForAnnotation:(RMAnnotation *)annotation
{
    if (annotation.isUserLocationAnnotation)
        return nil;
}

我还查看了这个线程,以了解我应该如何做类似的事情,但没有找到相同的用户位置代码。Apple 是否使用静态 PNG 图片来查找我的朋友?通过将其更改为另一种颜色(如果可能的话),我会失去该位置周围的自适应圆圈吗?

更新

正如@Incanus 在他的回复中所说,在我的-[RMMapViewDelegate mapView:layerForAnnotation:]回调方法中,我应该得到三个对应的调用isUserLocationAnnotation = YES——点、精度圆和脉冲光环。我只有一个,我不明白为什么。

另外,我尝试在跟踪模式更改时自定义注释,这就是我所做的:

if (self.mMapView.userTrackingMode == RMUserTrackingModeNone)
{
    for (RMAnnotation *annotation in self.mMapView.annotations) {
        if (annotation.isUserLocationAnnotation) {

            if ([annotation.annotationType isEqualToString:@"RMAccuracyCircleAnnotation"]) {

                [(RMCircle*)annotation.layer setFillColor:[[UIColor redColor] colorWithAlphaComponent:0.6]];
                [(RMCircle*)annotation.layer removeAllAnimations];
            }

        }
    }

    [self enableBouncingOnLayer:self.mMapView.userLocation.layer];
}
else
{
    [self.mMapView.userLocation.layer removeAnimationForKey:@"animateScale"];
}

到目前为止一切顺利,我让蓝色精度圈变成红色并停止改变大小。问题是,MapBox 框架仍然会更新它,所以它会恢复正常。

有趣的是,使用这种方法,我确实有 3 个注释,其中 isUserLocationAnnotation 设置为 YES,但我只得到一个回调。

任何帮助表示赞赏。

查找我的朋友应用截图

4

3 回答 3

4

在 Swift 3 中,

mapView.tintColor = .red

现在非常直截了当。

于 2017-06-19T15:25:07.200 回答
0

对于 MapBox SDK,您可以访问资源包中的实际蓝点并创建一个着色版本,可以使用 Core Graphics 即时或提前作为包中的另一个资源。

在“查找我的朋友”中,圆点仍然是蓝色的——他们实际上只是使用更改后的副本来进行其他注释。你也可以做到的。

您可能还对https://github.com/0xced/UIKit-Artwork-Extractor感兴趣,专门用于从 Find My Friends 应用程序中提取资源,这实际上是我们在 MapKit 框架上用来获取蓝点的MapBox SDK ;-)

于 2013-11-13T18:07:46.227 回答
0

正如 Incanus 指出的那样,我正在使用该layerForAnnotation:方法来自定义我的用户注释。然后我创建了这个方法来强制更新图层,以便可以再次绘制它。

- (void)refreshUserAnnotation {

    [mUserAnnotation setLayer: [self mapView:mMapView layerForAnnotation:mUserAnnotation]]; 

}
于 2014-07-21T12:22:41.917 回答