gpt4 book ai didi

ios - Mapview Mapbox iOS 上的动画折线

转载 作者:行者123 更新时间:2023-12-01 16:13:48 25 4
gpt4 key购买 nike

我正在更换 GoogleMaps SDKMapbox SDK对于我的 iOS 应用程序。
我被困在我的应用程序有一个功能的地方,我可以像优步应用程序一样在 map 上动画折线(已添加)。

但我似乎无法让它与 Mapbox iOS SDK 一起使用.
Mapbox 有一个示例,我可以在其中使用动画在 map 上添加折线坐标,但这不是我想做的。

立即添加折线,但我想为从起点到终点的路线设置动画。

这是我当前来自 Mapbox 示例的代码,用于在带有动画的 map 上添加折线坐标。

- (void)addPolylineToStyle:(MGLStyle *)style {
// Add an empty MGLShapeSource, we’ll keep a reference to this and add points to this later.
MGLShapeSource *source = [[MGLShapeSource alloc] initWithIdentifier:@"polyline" features:@[] options:nil];
[style addSource:source];
self.polylineSource = source;

// Add a layer to style our polyline.
MGLLineStyleLayer *layer = [[MGLLineStyleLayer alloc] initWithIdentifier:@"polyline" source:source];
layer.lineJoin = [NSExpression expressionForConstantValue:@"round"];
layer.lineCap = layer.lineJoin = [NSExpression expressionForConstantValue:@"round"];
layer.lineColor = [NSExpression expressionForConstantValue:[UIColor redColor]];

// The line width should gradually increase based on the zoom level.
layer.lineWidth = [NSExpression expressionWithFormat:@"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)",
@{@14: @5, @18: @20}];
[self.mapView.style addLayer:layer];
}

- (void)animatePolyline {
self.currentIndex = 1;

// Start a timer that will simulate adding points to our polyline. This could also represent coordinates being added to our polyline from another source, such as a CLLocationManagerDelegate.
[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(tick:) userInfo:nil repeats:YES];
}

- (void)tick:(NSTimer*)timer {
if (self.currentIndex > self.locations.count) {
[timer invalidate];
return;
}

// Create a subarray of locations up to the current index.
NSArray *currentLocations = [self.locations subarrayWithRange:NSMakeRange(0, _currentIndex)];

// Update our MGLShapeSource with the current locations.
[self updatePolylineWithLocations:currentLocations];

self.currentIndex++;
}

- (void)updatePolylineWithLocations:(NSArray<CLLocation *> *)locations {
CLLocationCoordinate2D coordinates[locations.count];

for (NSUInteger i = 0; i < locations.count; i++) {
coordinates[i] = locations[i].coordinate;
}

MGLPolylineFeature *polyline = [MGLPolylineFeature polylineWithCoordinates:coordinates count:locations.count];

// Updating the MGLShapeSource’s shape will have the map redraw our polyline with the current coordinates.
self.polylineSource.shape = polyline;
}

更新:
这是我期望做的事情的 gif。

enter image description here

请帮助我应该怎么做才能沿着折线设置路线动画?

谢谢

最佳答案

感谢您使用有用的视觉效果更新您的问题。您应该可以使用 line-gradient 来创建此效果。在计时器上更新的样式表达式。

虽然没有完善的示例来实现这一点,但 Mapbox iOS 团队有一些初始代码,显示了本示例 PR:https://github.com/mapbox/ios-sdk-examples/issues/203 中线梯度表达式的基本语法。 . (定义渐变的特定行是 here 。)

然后,您可以更新 MGLLineStyleLayer 的表达式。的 .lineColor定时器的属性。

⚠️ 免责声明:我目前在 Mapbox 工作 ⚠️

关于ios - Mapview Mapbox iOS 上的动画折线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57067795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com