我需要在iOS应用程序中绘制自定义弧。图片展示了我想如何使用小矩形绘制圆弧。我曾尝试使用绘制线条的CGContextAddArc,但我无法理解如何使用对象(矩形)而不仅仅是直线。这是可能的还是我应该选择另一种方法?
这是我要绘制的弧线:
答案 0 :(得分:3)
不要尝试单独绘制每个元素,而是尝试绘制具有大宽度和虚线图案的单个弧。例如,行宽10.0和虚线1,10将绘制与您要实现的效果非常相似的效果 - 在指定的路径上放置10个点的一系列1x10矩形。
相关的CGContext函数是CGContextSetLineWidth
和CGContextSetLineDash
。
答案 1 :(得分:1)
我使用QuartzCore框架中的UIBenizerCurve绘制这种东西。我做了以下的演示代码,
<。p>类.h文件struct angleRanges{
float startRange;
float endRange;
}angle_Range;
提供您的角度范围。 在.m文件中
#import <tgmath.h>
#import <QuartzCore/QuartzCore.h>
#define RADIUS 125.0f
#define METER_END_LIMIT 100.f
#define CIRCLE_STROKE_PATH_WIDTH 30.f
#define ANGAL -90.f
NSInteger numberOfParts = METER_END_LIMIT/5;
float angleRange = 0;
for(int loopIndex = 0; loopIndex <= numberOfParts; loopIndex++){
angle_Range.startRange = 0;
angle_Range.endRange = 360 - (180.f * angleRange)/METER_END_LIMIT;
double actualLineAngle = angle_Range.endRange - angle_Range.startRange;
float startAngle = actualLineAngle - 0.5;
float endAngle = actualLineAngle + 0.5;
startAngle = DEGREES_TO_RADIANS(startAngle);
endAngle = DEGREES_TO_RADIANS(endAngle);
UIBezierPath *aPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.center.x, self.center.y + RADIUS/2)
radius:(RADIUS+CIRCLE_STROKE_PATH_WIDTH/3)
startAngle:startAngle
endAngle:endAngle
clockwise:YES];
CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init];
[shapeLayer setFrame: self.frame];
[shapeLayer setPath: [aPath CGPath]];
shapeLayer.lineWidth = 5;
[shapeLayer setStrokeColor:[[UIColor grayColor] CGColor]];
[shapeLayer setFillColor:[[UIColor clearColor] CGColor]];
[shapeLayer setMasksToBounds:YES];
[self.layer addSublayer:shapeLayer];
[aPath closePath];
angleRange = angleRange + 5.0f;
}