2017-09-20 1 views
1

Ich versuche, einen Kreis mit vertikalen gestrichelten Linien im Rand des Kreises zu zeichnen.Kreis mit vertikalen gestrichelten Linie in Border

Ich habe so versucht, aber es macht Punkte im Kreis.

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

Bitte schreiben Sie den Arbeitscode. Ich habe versucht mit Ihrem Code aber nicht funktioniert – ChenSmile

Antwort

2

Bitte versuchen Sie es mit diesem Code, es funktionierte für mich. 1) Nehmen Sie UIView Unterklasse und in .h unter Code-Datei implementieren

#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) nun in your.m Datei implementieren Code unten

#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) Unterhalb der Methode drawRect ist ..

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

} 
+0

Was ist c? Ist es ein Kreis? Wenn ich Kreis benutze gibt es Fehler – ChenSmile

+0

@ChenSmile Sorry ich verpasste es ..., pls finde editierten Code –

+0

Was ist ich in i Typ und es ist nicht Zeichnung – ChenSmile

Verwandte Themen