我有一个要求,我必须绘制一个给定半径的圆。例如,对CLLocationManager
说200米。
CLLocationDistance radius = 100.0;
CLRegion *region = [[CLRegion alloc]initCircularRegionWithCenter:center radius:radius identifier:@"Apple"];
如何使用CGpoint
绘制圆圈?我没有使用任何地图。
答案 0 :(得分: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];
}
子类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
两者都有效。如果您不习惯继承UIView
,那么前一种技术可能更容易。
答案 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];