带有垂直虚线的圆

带有垂直虚线的圆

我正在尝试在圆的边框中绘制带有垂直虚线的圆。

我已经尝试过这种方法,但是它使圆圈成圆点。

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)下面是drawRect方法。
- (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];
        }

}

关于ios - 边界中带有垂直虚线的圆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46312711/

10-11 04:18