简体   繁体   中英

Circle with Vertical Dashed Line in Border

I am trying to draw a circle with vertical dashed line in border of circle.

I have tried like this, but it making dots in circle.

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];

Please try using this below code, it worked for me. 1) Take UIView subClass, and in .h file implement below code

#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) Now in your.m file, implement below code

#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) Below is the drawRect method..

- (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];
        }

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM