在边框中带有垂直虚线的圈子



我试图在圆边框中绘制一个用垂直虚线的圆圈。

我已经尝试过这样的尝试,但是它使点圆圈。

CAShapeLayer *circle = [CAShapeLayer layer];
circle.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, 2.0*radius, 2.0*radius) cornerRadius:radius].CGPath;
circle.fillColor = [UIColor clearColor].CGColor;
circle.strokeColor = [UIColor redColor].CGColor;
circle.lineWidth = 1;
circle.lineDashPattern = @[@2, @3];
[[self.view layer] addSublayer:circle];

请尝试使用以下代码,对我有用。1)以下面的代码为uiview子类,并在.h文件中实现。

#import <UIKit/UIKit.h>
@interface ViewClass : UIView
@property (nonatomic) NSUInteger numberOfGraduations; 
@property (nonatomic) CGFloat arcDegreeStart;
@property (nonatomic) CGFloat arcDegreeEnd;
@property (nonatomic) CGPoint arcCenter;
@property (nonatomic) CGFloat arcRadius;
@property (nonatomic) CGFloat deltaArc;  
-(void)drawGraduation:(CGPoint )center Radius:(CGFloat)radius Angle:(CGFloat)angle Length:(CGFloat)length Width:(CGFloat)width colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue;
@end

2)现在在您的.M文件中,在下面实现代码

#import "ViewClass.h"
@implementation ViewClass
{
    CGContextRef c;
}
-(void)drawGraduation:(CGPoint )center Radius:(CGFloat)radius Angle:(CGFloat)angle Length:(CGFloat)length Width:(CGFloat)width colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue{
    c = UIGraphicsGetCurrentContext();
    CGFloat radius2 = radius+length; // The radius of the end points of the graduations
    CGPoint p1 = (CGPoint){cos(angle)*radius+center.x, sin(angle)*radius+center.y}; // the start point of the graduation
    CGPoint p2 = (CGPoint){cos(angle)*radius2+center.x, sin(angle)*radius2+center.y}; // the end point of the graduation
    CGContextMoveToPoint(c, p1.x, p1.y);
    CGContextAddLineToPoint(c, p2.x, p2.y);
    CGContextSetLineCap(c, kCGLineCapRound);
    CGContextSetRGBStrokeColor(c, red, green, blue, 1.0);
    CGContextSetLineWidth(c, width);
    CGContextSetBlendMode(c,kCGBlendModeNormal);
    CGContextStrokePath(c);
}

3)以下是绘制方法。

- (void)drawRect:(CGRect)rect {
    [super drawRect:rect];
    CGRect r = self.bounds;
    _numberOfGraduations = 31;
    _arcCenter = (CGPoint){r.size.width*0.5, r.size.height*0.5}; // center of arc
    _arcRadius = (r.size.width*0.5)-20; // radius of arc
    CGFloat maxGraduationWidth = 1.0;
    CGFloat maxGraduationWidthAngle = maxGraduationWidth/_arcRadius; // the maximum graduation width angle (used to prevent the graduations from being stroked outside of the main arc)
    _arcDegreeStart =-M_PI*0.2; 
    _arcDegreeEnd = -M_PI*0.8; 
    // draw graduations
    _deltaArc = (_arcDegreeEnd-_arcDegreeStart+maxGraduationWidthAngle)/(_numberOfGraduations-1); // the change in angle of the arc
    for (int i = 0; i < _numberOfGraduations; i++) {
    [self drawGraduation:_arcCenter Radius:_arcRadius Angle:_arcDegreeStart+(i*_deltaArc) Length:14 Width:1 colorWithRed:0.0 green:0.0 blue:1.0];
        }
}

最新更新