为CLLocationManager区域绘制一个圆

时间:2013-05-16 04:55:05

标签: iphone ios core-location

我有一个要求,我必须绘制一个给定半径的圆。例如,对CLLocationManager说200米。

CLLocationDistance radius = 100.0;
CLRegion *region = [[CLRegion alloc]initCircularRegionWithCenter:center radius:radius identifier:@"Apple"];

如何使用CGpoint绘制圆圈?我没有使用任何地图。

2 个答案:

答案 0 :(得分:1)

至少有两种方法:

  1. 将QuartzCore.framework添加到项目中,创建UIBezierPath,然后创建CAShapeLayer指定其路径,然后将CAShapeLayer添加为当前视图图层的子图层。例如,我可以从我的视图控制器调用它:

    #import <QuartzCore/QuartzCore.h>
    
    - (void)addCircle
    {
        UIBezierPath *path = [UIBezierPath bezierPath];
        [path addArcWithCenter:CGPointMake(self.view.layer.bounds.size.width / 2.0, self.view.layer.bounds.size.height / 2.0) radius:self.view.layer.bounds.size.width * 0.40 startAngle:0.0 endAngle:M_PI * 2.0 clockwise:YES];
    
        CAShapeLayer *layer = [CAShapeLayer layer];
        layer.path = [path CGPath];
        layer.strokeColor = [[UIColor darkGrayColor] CGColor];
        layer.fillColor = [[UIColor lightGrayColor] CGColor];
        layer.lineWidth = 3.0;
    
        [self.view.layer addSublayer:layer];
    }
    
  2. 子类UIView并覆盖drawRect以使用Core Graphics绘制圆圈。

    @implementation CircleView
    
    - (void)drawRect:(CGRect)rect
    {
        CGContextRef context = UIGraphicsGetCurrentContext();
    
        CGContextAddArc(context, self.bounds.size.width / 2.0, self.bounds.size.height / 2.0, self.bounds.size.width * 0.40, 0, M_PI * 2.0, YES);
    
        CGContextSetStrokeColorWithColor(context, [[UIColor redColor] CGColor]);
        CGContextSetFillColorWithColor(context, [[UIColor blueColor] CGColor]);
        CGContextSetLineWidth(context, 3.0);
    
        CGContextDrawPath(context, kCGPathFillStroke);
    }
    
    @end
    
  3. 两者都有效。如果您不习惯继承UIView,那么前一种技术可能更容易。

    参考

    Quartz 2D Programming Guide

答案 1 :(得分:0)

你可以这样绘制并根据你想要的改变它。 您需要为其导入QuartzCore.framework

int radius = 100;
CAShapeLayer *circle = [CAShapeLayer layer];

circle.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 2.0*radius, 2.0*radius) 
                                         cornerRadius:radius].CGPath;
// Center the shape in self.view
circle.position = CGPointMake(CGRectGetMidX(self.view.frame)-radius, 
                              CGRectGetMidY(self.view.frame)-radius);

// Configure the apperence of the circle
circle.fillColor = [UIColor clearColor].CGColor;
circle.strokeColor = [UIColor blackColor].CGColor;
circle.lineWidth = 5;

// Add to parent layer
[self.view.layer addSublayer:circle];