iOS地图画线区域填充颜色的方法

之前的博客记录了如何 在google地图上面手工画线,并在画线区域内显示特定经纬度的坐标点,然后在坐标点上加大头针的情况,但是没有实现填充色,这里记录实现填充色方法:

 

静态画线中很容易填充path颜色,但是动态随着手指移动添加的时候总是加不上,于是决定在松手的时候重新绘制一遍path并填充颜色,也就是在touchend里面再实现一次静态画线填充颜色,那么首先就要记录画线时的坐标点,这样在touchend时可以利用这些坐标点来静态画线,在touchbegan方法里:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

UITouch *touch = [touches anyObject];

CGPoint location = [touch locationInView:imageView];

beginPoint=location;

//创建path

pathRef=CGPathCreateMutable();

CGPathMoveToPoint(pathRef, NULL, location.x, location.y);

//CoordinateClass是我自己创建的类,一个NSObject类,存储坐标点,里面有x和y成员

CoordinateClass *point1=[[CoordinateClass alloc] init];

[point1 initCoordinate:location];

[array addObject:point1];//touch起始点添加到数组

}

然后是touchmove事件记录每一个移动的点,添加如下代码:

   UITouch *touch = [touches anyObject];

CGPoint location = [touch locationInView:imageView];

CoordinateClass *point=[[CoordinateClass alloc] init];

[point initCoordinate:location];

[array addObject:point];

这样就记录了轨迹中的坐标点,存在了aray数组中,接下来主要就是touchend事件:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{

//自动闭合线路,松手时画一条松手点到起点的线

CGContextMoveToPoint(UIGraphicsGetCurrentContext(), upPoint.x, upPoint.y);

CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), beginPoint.x, beginPoint.y);

CGContextDrawPath(UIGraphicsGetCurrentContext(), kCGPathFillStroke);

imageView.image=UIGraphicsGetImageFromCurrentImageContext();

 

CGPathAddLineToPoint(pathRef, NULL, beginPoint.x, beginPoint.y);

CGPathCloseSubpath(pathRef);

//加大头针,自己写的判断范围函数

[self addAnotationView:locationConverToImage];

[self addAnotationView:locationConverToImage2];

[self addAnotationView:locationConverToImage3];

[self addAnotationView:locationConverToImage4];

[self addAnotationView:locationConverToImage5];

[self addAnotationView:locationConverToImage6];

[self addAnotationView:locationConverToImage7];

[self addAnotationView:locationConverToImage8];

//fill代码

CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(), [UIColor colorWithRed:0.7 green:0.2 blue:0.6 alpha:0.23].CGColor);

CGContextBeginPath(UIGraphicsGetCurrentContext());

CGContextMoveToPoint(UIGraphicsGetCurrentContext(), beginPoint.x, beginPoint.y);

for (int i=0; i<[array count]; i++) {

[self addlineFunction:[array objectAtIndex:i]];

}

//填充和画线函数

CGContextDrawPath(UIGraphicsGetCurrentContext(), kCGPathFillStroke);

CGContextClosePath(UIGraphicsGetCurrentContext());

imageView.image=UIGraphicsGetImageFromCurrentImageContext();

}

经验就是画线可以用

CGContextDrawPath(UIGraphicsGetCurrentContext(), kCGPathFillStroke);

别忘了设置imageview的image。

当然还可以用

    CGContextFillPath(<#CGContextRef c#>)

5个评论

  1. 请教下,我有一个类似的功能要实现,就是在所画的区域内搜索 特定的建筑物 例如公交站,并显示出来…
    我现在想不明白的是: 如何判断 哪些建筑物是在所画的区域里面呢?
    如果知道麻烦告知下,非常感谢…
    如果方便能否加下QQ: 410967191 ..

发表评论

电子邮件地址不会被公开。 必填项已用*标注