我想在mapbox中添加模糊效果。当第一次加载地图时,时间只显示地图中的当前位置其他地图是蓝色。见截图
当我将用户位置移动到另一个位置时,地图上的其他位置清晰。还要在特定位置显示注释 看截图
帮助我如何实现这个
这里我将实现一些代码
- (CGPoint)convertLatLongCoord:(CGPoint)latLong {
CGSize screenSize = [UIScreen mainScreen].applicationFrame.size];
CGFloat SCALE = MIN(screenSize.width, screenSize.height) / (2.0 * EARTH_RADIUS);
CGFloat OFFSET = MIN(screenSize.width, screenSize.height) / 2.0;
CGFloat x = EARTH_RADIUS * cos(latLong.x) * cos(latLong.y) * SCALE + OFFSET;
CGFloat y = EARTH_RADIUS * cos(latLong.x) * sin(latLong.y) * SCALE + OFFSET;
return CGPointMake(x, y);
}
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
NSLog(@"data=%f",self.mapview.userLocation.coordinate.latitude);
CLLocation *currentLoc=[locations objectAtIndex:0];
_coordinate=currentLoc.coordinate;
CGPoint latLong = {_coordinate.latitude, _coordinate.longitude};
oldcord = [self convertLatLongCoord:latLong];
NSLog(@"Cartesian Coordinate: (%f, %f)",oldcord.x, oldcord.y);
}
在这段代码中,我将得到UserLocation坐标的完美视图像素点。之后我想用CGPoint清除视图中的模糊,但我无法得到它。我认为我将创建CGPoint数组,而不是使用线条来模糊查看,但我不能得到它请建议我。
我也使用这个lib但我无法理解https://github.com/DenHeadless/Shapes
答案 0 :(得分:3)
按照我在评论中添加的逻辑here我为您download it here 制作了示例,请检查下面的结果
该示例包含以下逻辑。
DrawView
,它实际上处理所有绘图和
擦除部分。CLLocationManager
来确定用户的移动。只要CLLocationManager
开始提供位置,我们就会使用以下代码转换关于MapView引脚位置的坐标
CGPoint pt=[self.map convertCoordinate:location.coordinate toPointToView:self.view];
我们传递CGPoint
,它是UIView的转换值,用于清除图纸中的区域
[self.drawView eraseAtPoint:pt];
当来自用户坐标的CGPoint传递给DrawView eraseAtPoint
函数时,我们擦除一个已定义半径的区域,并根据需要清除该区域。
我添加了一个示例directions.gpx
文件来模拟GPS位置,示例GIF显示了移动。
注意:项目的链接将在 2017年3月14日之后过期,因此请保持下载状态,如果您希望样本再次ping注释。随意根据需要进行修改。
<强>更新强>
添加以圆圈而不是方块擦除区域的功能,只需将 DrawView 中的drawRect
功能替换为下面的代码
- (void)drawRect:(CGRect)rect {
// Drawing code
UIColor *backgroundColor=[UIColor colorWithRed:0.85 green:0.85 blue:0.85 alpha:1.0f];//Grey
[backgroundColor setFill];
UIRectFill(rect);
if(!self.initialLoad){//If the view has been loaded from next time we will try to clear area where required..
// clear the background in the given rectangles
for (NSValue *holeRectValue in _rectArray) {
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect holeRect = [holeRectValue CGRectValue];
[[UIColor clearColor] setFill];
CGRect holeRectIntersection = CGRectIntersection( holeRect, rect );
CGContextSetFillColorWithColor( context, [UIColor clearColor].CGColor );
CGContextSetBlendMode(context, kCGBlendModeClear);
CGContextFillEllipseInRect( context, holeRectIntersection );
}
}
self.initialLoad=NO;
}
干杯。